比较数组中的值失败

Comparing values in Array fails

本文关键字:失败 数组 比较      更新时间:2023-09-26

有时比较数组中的两个字符串会失败。失败偶尔只发生在循环的ifs中。下面的示例代码代表实现该问题。

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秒时就把这个故障装置弄坏了。有时,要花很长时间才能弄清楚代码不起作用的原因。

您似乎已经得出结论,问题与数组中的实际数据有关。我怀疑,如果不了解这些数据,我们就无法提供更具体的帮助

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

看起来您想要从数组中移除双值。尝试使用:

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')