比较Array中的值失败

时间:2012-01-29 19:59:05

标签: javascript arrays compare

有时比较数组中的两个字符串失败。仅在循环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,所有值都不相似。

在循环中,尽管[n-1][n]中的值相似,但所有值都在memTable [idx]中设置。已激活的alert()会显示正确的比较结果,但if会全部通过。看起来if中的比较是通过引用而不是通过值来完成的。这怎么可能?这是JavaScript解释器中的错误还是什么?

可以通过向比较表达式中的两个成员添加valueOf() - 方法来纠正操作。我只是在if循环中撞毁了这个失败者。有时需要很长时间才能弄清楚代码无法正常工作的原因。

2 个答案:

答案 0 :(得分:0)

您似乎已经得出结论,该问题与数组中的实际数据有关。我怀疑在没有看到数据的情况下我们无法更具体地帮助。

如果将valueOf()放在前面使其工作,那么您可以编码检查何时与valueOf()的比较与直接!=不同,并将两个值输出到调试控制台或进入调试器,以便您可以检查导致问题的值。换句话说,编写捕获问题条件的代码并允许您检查它。

答案 1 :(得分:0)

看起来您想要从Array中删除double值。 尝试使用:

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等于&#39; 1&#39;)