2013-05-29 2 views
0

У меня есть переменная, которая динамически задается на странице. Затем у меня есть список цветов в массиве. Мне нужно увидеть, содержит ли переменная цвета один из элементов массива.JavaScript, если переменная имеет indexOf элемент в массиве

Вот код:

var colorlist = ['Silver', 'Gray', 'Black', 'Red', 'Purple', 'White']; 
var col1 = ""; 
var color1 = 'Titanium Silver'; 
for (var c = 0; c < colorlist.length; c++) 
{ 
    if(color1.indexOf(colorlist[c])) 
    { 
     col1 = colorlist[c]; 
    } 
    else 
    { 

    } 
} 

То, что я бы ожидать, что это возвращение является «Серебро», но он постоянно возвращался последний элемент в массиве. Что я делаю не так?

+0

Если вы используете строку, помните, что IE <9 не имеет 'indexOf', вы можете использовать' search' – NicoSantangelo

+0

, который я тестировал в IE 7+, и все работает отлично. – cfox

+0

@NicoSantangelo: у него нет 'Array.indexOf', но' String.indexOf' в порядке. – georg

ответ

3

Измените сравнение с:

if(color1.indexOf(colorlist[c]) > -1) 

-1 возвращается, когда элемент не найден, но -1 является truthy. Единственным номером - 0. Поэтому ваше сравнение не будет работать так, как вы ожидаете.

Посмотрите на эту скрипку, который печатает результат indexOf и truthyness значения: http://jsfiddle.net/R3Xb3/

Обратите внимание, как первый один возвращается true, потому что «Silver» находится в строке (в действительной индекс). Но тогда остальные не найдены, возвращаемый индекс - -1, а результат - true.

+0

Итак, почему цикл OP будет возвращать последний элемент? – tymeJV

+0

@tymeJV Поскольку остальные элементы массива вернут '-1', это правда. И ОП не «ломается» в цикле, поэтому продолжается – Ian

+1

Ahh Я вижу, что здесь происходит, спасибо! – tymeJV

Смежные вопросы