我正在尝试测试数组中是否已存在值。
在这种情况下," 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)
答案 0 :(得分:3)
.indexOf()
方法比较它使用===
严格相等运算符。在这些条件下,没有两个不同的阵列彼此相等。
当您使用数组(或者,就此而言,对象)文字表达式来创建对象时,您将获得不同的单个对象。一个文字表达看起来与另一个完全相同的事实并不代表他们共享身份。
答案 1 :(得分:0)
第二次使用声明
node1 = ['Workplace','Revenue Overall',0];
当node1已经存在时,在node1的词法环境中创建了一个新条目。因此,检查indexOf
将找不到该条目的先前值。这结束时,node1
第二次被放置在数组中。
答案 2 :(得分:0)
您必须比较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)