比较数组中的值失败
Comparing values in Array fails
有时比较数组中的两个字符串会失败。失败偶尔只发生在循环的if
s中。下面的示例代码代表实现该问题。
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')
相关文章:
- 在数组中插入对象失败
- $q.all当输入数组中的一项不是promise时,Typescript检查器失败
- 断言错误:断言失败:坐标数组的长度应与步幅匹配
- ember dev fixes错误:“;断言失败:findAll的响应必须是数组,而不是未定义的“”;
- 去掉js可观察数组和复选框,选中绑定失败
- 在 ie8 中使用茉莉花比较数组失败
- 克隆对象数组失败
- Ember 断言失败:来自 findQuery 的响应必须是数组,而不是未定义
- 循环遍历 ArrayController 失败,因为它不是数组,即使控制器具有正确的数据模型也是如此
- 从数组获取非重复索引在 0 时失败
- 在 Javascript 中将带有空格的字符串数组转换为小写,然后在 Webkit 中搜索它们失败
- JavaScript 数组推送 Anon 函数失败
- Javascript 多维数组返回第一个值,然后失败
- 将数据数组传递给 $.ajax 失败
- ng-repeat失败,并显示一个对象数组
- 断言失败:#each 循环的值必须是数组余烬 js
- 在处理延迟数组时获取成功的延迟并忽略失败的延迟
- Javascript:forEach在一个就地数组上经常失败
- 将对象推入数组失败
- 在函数中破坏数组失败;let未被定义”;