JQuery inArray всегда возвращает -1
Я не могу понять, почему я продолжаю получать -1 для lastProductIndex, когда ясно, что lastProductID находится в массиве!
var lastProductID = 6758;
var allProductIDs = [5410, 8362, 6638, 6758, 7795, 5775, 1004, 1008, 1013]
var lastProductIndex = $.inArray(lastProductID, allProductIDs);
Ответы
Ответ 1
У меня была такая же проблема вчера,
var data=[2,4,6,8];
alert( $.inArray(4,data) ) // output 1 as expected
alert( $.inArray("4",data) ) // output -1 as expected
Обычно это происходит, когда вы получаете значение для проверки из элемента ввода или что-то, что возвращает строку. Вам нужно сделать parseInt(string,radix)
, чтобы преобразовать его в число...
Ответ 2
Попробуйте это вместо:
$.grep(allProductIDs, function(n) { return n == lastProductID; });
Caveat: grep возвращает массив.
Похоже, что jQuery выполняет === вместо == с inArray.
Ответ 3
Вот почему все ненавидят языки, которые не ТИПЕД. Первоначально я установил значение lastProductIndex со значением, но это была строка (потому что я получил значение из объекта HttpResponse из возвращаемого JSON. Поэтому, следовательно, я установил переменную в строку, поскольку возвращаемое значение JSON было строкой Когда я жестко закодировал число 6758 в $.inArray, он работал нормально, так что привлек мое внимание.
Ответ 4
Метод $.inArray() похож на собственный .indexOf() метод JavaScript, в котором он возвращает -1, когда он не находит совпадения. Если первый элемент внутри массива соответствует значению, $.inArray() возвращает 0.
Согласно:
http://api.jquery.com/jQuery.inArray/
Ответ 5
Используете ли вы какие-либо другие библиотеки JavaScript на своей странице?
Может быть конфликт для сокращения $
, если вы есть. Это можно решить несколькими способами, один из которых будет обертывать код в самоисполняющейся анонимной функции
(function($) {
var lastProductIndex = $.inArray(lastProductID, allProductIDs);
})(jQuery);
Ответ 6
Это тоже смутило меня, у меня была идентичная проблема. Кажется, jQuery.inArray() требует строки. Поэтому вы можете просто сделать:
var lastProductID = "6758";
В моем случае я пытался:
var foo = date.getTime()/1000;
Который всегда приводил к возврату -1 из $.inArray()
Но вы можете просто передать его в строку:
var foo = String (date.getTime()/1000);
Надеюсь, что кто-то помог:)