Подтвердить что ты не робот

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);
4b9b3361

Ответ 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);

Надеюсь, что кто-то помог:)