2016-06-27 5 views
-4

У меня есть массив с числами ListIds, и мне нравится проверять, содержит ли он мой идентификатор пользователя myId, но по какой-то странной причине он продолжает возвращать no match, что я делаю неправильно здесь?Проверка Javascript, если массив содержит значение

 var ListIds = object.ListFolowers; // = 33,34,35 
     var myId = userProfileID2_class; // = 33 

     if(ListIds.indexOf(myId)>=0){ 
     debug_log('Value exist'); 
     } else { 
     debug_log('no match'); 
     } 

пс, если я изменить if(ListIds.indexOf(myId)>=0) к if(ListIds.indexOf(33)>=0) это работает ...

Fixit его путем добавления к +if(ListIds.indexOf(+myId)>=0){

+1

Не знаю, потому что вы не предоставили нам никаких реальных данных, но предполагалось бы, что вы сравниваете строки с числами, которые не будут работать с '.indexOf()'. Попробуйте добавить '+' перед 'myId', когда вы передадите его в' indexOf() '. –

+1

[Невозможно воспроизвести] (https://jsfiddle.net/xpn7c2wx/). Если 'indexOf (33)' работает, но 'indexOf (myId)' does not, это явно означает, что 'myId' не' 33'. Проверьте 'myId === 33', и вы увидите. – Oriol

+0

Код выглядит корректно для меня. Является ли 'ListIds' фактически массивом чисел и что такое' myId'? –

ответ

1

догадки @Rohit Shedage был правильным.

Вашей проблема в том, что userProfileID2_class является строковым значением и делая +myId к типу строки, то JavaScript двигатель должен автоматически конвертируется строка в целое число перед применением indexOf к нему.

Возможно, вы захотите вместо этого исправить причину проблемы с корнем. То есть, сохраняя свой Id как целое число/преобразовывая его в целое число перед его настройкой.

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