Сравнивать значения в массиве не удается - PullRequest
0 голосов
/ 29 января 2012

Иногда сравнение двух строк в массивах не удается.Отказ происходит иногда только в цикле if с.Приведенный ниже пример кода предназначен для реализации проблемы.

searchTable.sort();
for(n=1;n<searchTable.length;n++){
  // alert(searchTable[n-1]!=searchTable[n]);
  if(searchTable[n-1]!=searchTable[n]){
    idx++;
    memTable[idx]=searchTable[n];
  }
}

Значения в searchTable точно равны strings, и все значения также не одинаковы.устанавливаются в memTable [idx], несмотря на аналогичные значения в [n-1] и [n].Активированный alert() показывает правильный результат сравнения, но if проходит через все.Похоже, что сравнение в if выполняется по ссылке, а не по значению.Как это возможно?Это ошибка в интерпретаторе JavaScript или что?

Действие можно исправить, добавив valueOf() -методы к обоим элементам в выражении сравнения.Я разбил этот неудачник, только зацикленный if с.Иногда требуется много времени, чтобы понять, почему код не работает.

Ответы [ 2 ]

0 голосов
/ 30 января 2012

Похоже, вы хотите удалить двойные значения из массива.Попробуйте использовать:

var tmpObj = {}, resultArr = [];
for(n=1;n<searchTable.length;n++){
  if (searchTable[n] in tmpObj){
    continue;
  }
  tmpObj[searchTable[n]] = true;
}
for (var l in tmpObj){
 resultArr.push(l);
}

Примечание: это не будет различать числа и строки (поэтому 1 равно '1')

0 голосов
/ 30 января 2012

Вы, похоже, пришли к выводу, что проблема связана с фактическими данными в массивах.Я подозреваю, что мы не можем помочь более конкретно, не видя, что эти данные.

Если поставить valueOf() впереди, это сработает, тогда вы можете кодировать проверку, когда сравнение с valueOf() отличается от простого !=, и выводить два значения на консоль отладки или прерываниев отладчик, чтобы вы могли проверить, какие значения являются причиной проблемы.Другими словами, напишите код, который улавливает проблему и позволяет проверить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...