2015-07-24 2 views
2

Я проверяю, что определенное значение массива существует в строке или нет. Для этого я осуществил следующий кодindexOf не получает точное значение в javascript

function Check() { 
     var Value = 'I III'; 
     var Opt = new Array("I", "II", "III", "IV"); 
     for (var i = 0; i < Opt.length; i++) { 
      if (Value.indexOf(Opt[i]) > -1) { 
       alert("Hello"); 
      } 
     } 
    } 

если значение существует в строке должно отображаться предупреждение, но проблема в том, что это отображение настороже 3 раза вместо 2 раза, потому что IndexOf приобретает II как часть строки, потому что в строке существует символ III.

+0

Вы можете разделить значение пробелами, и затем вычислить разницу в массивах. Результатом будут элементы, не найденные в строке. – elclanrs

+5

Он должен предупредить 3 раза, предупреждение 2 раза неверно. Потому что '' II "' действительно находится в строке '" III "'. –

+0

II существует в строке. Таким образом, в данной строке есть три совпадения. –

ответ

6

Самый простой способ обойти это было бы разделить Value с разделителем (например, в каждом пространстве) с String.prototype.split:

var value = 'I III'.split(' ') 
 
var options = ['I', 'II', 'III', 'IV'] 
 

 
options.forEach(function(option) { 
 
    var index = value.indexOf(option) 
 
    if (index !== -1) { 
 
    // don't use `document.write` in general; it's just very useful in stack snippets 
 
    document.write(index + ' : ' + value[index]) 
 
    document.write('<br>') 
 
    } 
 
})

Пара отмечает:

  • не заглавные буквы ваших переменных; использовать camelCase для переменных и PascalCase для классов/etc
  • не использовать new Array(); вместо этого предпочитают литерал массива: []
0

Это еще один способ получить АНС

функция Check() {

var Value = 'I III'.split(" "); var Opt = ["I", "II", "III", "IV"]; 

    for (var i = 0; i < Opt.length; i++) { 

     if (Value.indexOf(Opt[i]) > -1) { 

      alert("Hello"); 

     } 
    } 
}Check(); 
Смежные вопросы