2012-12-10 2 views
0

У меня есть пример кода:Ошибка при сравнении значения в массиве с помощью javascript?

var find = ['iphone 3', 'iphone 4', 'iphone 5']; 
var search = 'iphone 5'; 
for(i=0; i<find.length; i++) { 
    if(search == find[i]) { 
     alert('Yes'); 
    } else { 
     alert('No'); 
    } 
} 

Когда я запускаю код, результат 2 предупреждения (alert('Yes') and alert('No')), но результат точно только alert('Yes'),, как это исправить?

+0

Это, кажется, работает полностью нормально. Два '' '' '' '' за ними следует 'Да'. –

+0

@YogendraSingh: Я думаю, что OP не хочет, чтобы _ «no» _ отображал –

+0

@EliasVanOotegem: Я ответил на эту часть с 'if'. –

ответ

1

Если я правильно понимаю ваш вопрос, вы не хотите no быть предупреждены, когда нет матча найдено:

var find = ['iphone 3', 'iphone 4', 'iphone 5']; 
var search = 'iphone 5'; 
for(i=0; i<find.length; i++) 
{ 
    if(search == find[i]) 
    { 
     alert('Yes'); 
     break;//stop loop, found match 
    } 
} 

Просто не обеспечивает else ветви. Да, и если вы не заботитесь о старых браузерах:

if (find.indexOf(search) !== -1) 
{ 
    alert('yes'); 
} 
1

Это может быть сделано просто с .indexOf:

if (find.indexOf(search) > -1) { 

    alert('Yes'); 

} else { 

    alert('No'); 

} 

Заменить это с полностью вашего кода за исключением переменных деклараций.

0

Если вы хотите, чтобы предупредить матч нашел затем использовать флаг, чтобы отметить, где был найден матч или нет. В конце концов, использовать флаг, чтобы предупредить соответствующее сообщение, как показано ниже:

var find = ['iphone 3', 'iphone 4', 'iphone 5']; 
var search = 'iphone 5'; 
var present = false; 
for(i=0; i<find.length; i++) { 
    if(search == find[i]) { 
     present = true; 
     break; 
    } 
} 
if(present) { 
    alert('Yes'); 
} else { 
    alert('No'); 
} 

Пожалуйста, обратите внимание: Там может быть более эффективными способами, но при попытке помощи следующего только вашего алгоритма.

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