2011-06-30 3 views
17

Моя проблема заключается в том, что цикл продолжает работать в инструкции if даже для повторяющихся штрих-кодов. Я пытаюсь ввести оператор if только для уникальных штрих-кодов, но в конце цикла myArray имеет дубликаты в нем .... почему?javascript find if value is NOT IN array

var myArray = new Array(); var i = 0; 
$("li.foo").each(function(){ 
    var iBarCode = $(this).attr('barcode'); 
    if(!(iBarCode in myArray)){ 
     myArray[i++] = iBarCode; 
     //do something else 
    } 
}); 

ответ

34

JQuery имеет функцию inArray().

var myArray = new Array(); var i = 0; 
$("li.foo").each(function(){ 
    var iBarCode = $(this).attr('barcode'); 
    if($.inArray(iBarCode, myArray) == -1){ 
     myArray[i++] = iBarCode; 
     //do something else 
    } 
}); 
+2

Ваш код неверен, '! ($. InArray (iBarCode, myArray)' сбой, если элемент находится в позиции 0. вы должны использовать '!! ~ ($. InArray (iBarCode, myArray)' вместо. – Ravan

+0

сейчас мой цикл не вводит оператор if для любых штрих-кодов! myArray пуст в конце – sadmicrowave

+0

sadmicrowave, я неправильно написал инструкцию if, поскольку inArray возвращает -1, если не найден. Я обновил ответ. – Gazler

9

Поиск in ключевого слова для свойств, например, если вы хотите знать, если объект имеет некоторый доступный метод. Поскольку вы ищете значения, он всегда возвращает false.

Вместо этого вы должны использовать функцию поиска массива, как советует Gazler.

+2

+1 для ex почему код не работает. – Gazler

+4

и если не использовать jquery, просто используйте 'if (myArray.indexOf (iBarCode) === -1) {// сделаем что-нибудь еще}' – gcb