Javascript indexOf按预期工作
我想测试一个数组中是否已经存在一个值。Javascript indexOf按预期工作
在这种情况下,“node1”的值不会改变。两个阵列都是相同的。
但是,尽管进行了indexOf(node1)测试,但同一个节点被添加到数组两次。 http://jsfiddle.net/v9yxj5hm/2/
var tree_rows = [];
var node1 = ['Workplace','Revenue Overall',0];
if (tree_rows.indexOf(node1) == -1){ tree_rows.push(node1); }
node1 = ['Workplace','Revenue Overall',0];
if (tree_rows.indexOf(node1) == -1){ tree_rows.push(node1); }
alert(tree_rows)
的.indexOf()
方法,如同其被使用===
全等运算符进行比较。在这些条件下,没有两个不同的阵列彼此相等。
当您使用数组(或者,对于该事物,对象)文字表达式来创建对象时,您会得到不同的单独对象。一个字面表达看起来完全像另一个的事实并不意味着他们共享身份。
谢谢。有没有内置的函数可以为数组执行非严格的相等比较? – corycorycory 2014-09-03 13:59:11
@corycorycory不,如果你想比较数组,你必须实现你自己的方法来做到这一点。对于像JavaScript这样的语言来说,通用的“深度比较”操作确实很难定义。 – Pointy 2014-09-03 14:13:03
的第二个用途声明
node1 = ['Workplace','Revenue Overall',0];
的节点1时已经存在创建为节点1词法环境的新条目。因此,对indexOf
的检查将找不到该条目的先前值。这以node1
第二次放置在阵列中结束。
您必须比较node1
中的每个项目是否在tree_rows
。也许你想要这个?
var tree_rows = [];
var node1 = ['Workplace','Revenue Overall',0];
for (i in node1) { if (tree_rows.indexOf(node1[i]) == -1){ tree_rows.push(node1[i]); }}
node1 = ['Workplace','Revenue Overall',0];
for (i in node1) { if (tree_rows.indexOf(node1[i]) == -1){ tree_rows.push(node1[i]); }}
alert(tree_rows)
两个数组是两个不同的对象。 '[]!= []'。你需要循环,并比较**每个**项目。 – elclanrs 2014-09-02 21:36:33