2016-05-02 3 views
2

Я работаю над кодом, который требует от меня получить индекс строки в массиве. Для этого я использую функцию JavaScript indexOf. Проблема здесь в том, что я могу получить индекс чисел, которые кодируются как строка, но не могут получить индекс для строк.JavaScript indexOf давая неправильный результат

var codes = ["1", "2", "‍2A", "‍2B", "3", "4", "5", "6", "7", "8", "9", "10", 
      "11", "12", "13", "14", "15", "16", "17", "18", "19", "21", "22", 
      "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", 
      "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", 
      "45", "46", "47", "48", "49", "50", "51", "52", "53", "54", "55", 
      "56", "57", "58", "59", "60", "61", "62", "63", "64", "65", "66", 
      "67", "68", "69", "70", "71", "72", "73", "74", "75", "76", "77", 
      "78", "79", "80", "81", "82", "83", "84", "85", "86", "87", "88", 
      "89", "90", "91", "92", "93", "94", "95"]; 
console.log(codes.indexOf("2A")); 

Ответ, который я получаю в консоли, равен -1 вместо 2, так как «2А» лежит на 2-й позиции.

+1

Ваш код работает здесь. Я считаю, что опечатка была отсутствующей запятой – rafaelcpalmeida

+7

Когда я вставляю код в jsFiddle, я вижу, что непечатные символы отображаются красным цветом. https://jsfiddle.net/j08691/mmdxn0vv/. Исправьте это, и все в порядке. – j08691

+0

Возможный дубликат [Неожиданный результат функции String.indexOf?] (Http://stackoverflow.com/questions/21195583/unexpected-result-from-string-indexof-function) –

ответ

11

Символ не 2A, он содержит символ непечатаемого символа Zero Width Joiner в начале строки.

Это может быть проверено с

console.log("‍2A".charCodeAt(0)); // > 8205 // Note that the string is copied from the array `codes` 

Это делает строка недопустима.

Неудивительно, почему indexOf не дает правильного индекса.

2

У вашего кода есть ошибка. indexOf работает нормально. Посмотрите, что произойдет, когда я вставляю Коды массива в jsfiddle (прикрепить файл)

Problem with image

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