有时比较数组中的两个字符串失败。仅在循环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
循环中撞毁了这个失败者。有时需要很长时间才能弄清楚代码无法正常工作的原因。
答案 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;)