我有一个javascript if-else语句。它从websocket获取数据,并根据条件为true或false进入相关分支。
但我发现,添加到两个阵列的数据是相同的。这是代码:
cities = JSON.parse(evt.data);
if (cities.tag == 'red'){
dataset.length = 0;
console.log(cities.tag);
for (var i = 0, item; item = buffer[i]; ++i) {
buffer[i][1][0] = cities.clusters[item[0]] || 0;
//console.log(buffer);
dataset.push(buffer[i][1][0]);
console.log('no1: ',dataset);
}
}else{
dataset2.length = 0;
console.log(cities.tag);
for (var i = 0, item; item = buffer2[i]; ++i) {
buffer2[i][1][0] = cities.clusters[item[0]] || 0;
dataset2.push(buffer2[i][1][0]);
console.log('no2: ',dataset2);
}
}
draw();
我知道它进入正确的分支并且数据不同,但是不知何故,else分支中的代码只复制了if分支中的数组。
我认为代码中必须包含某些东西,但我看不清楚。
由于
答案 0 :(得分:1)
慢慢读取代码并考虑输入:
item
和索引i
:
buffer2[i][1][0]
设置为cities.clusters[item[0]]
或0
的值; 但是看,这里已经存在问题
如果缓冲区的任何给定级别的每个元素都应该是相同的类型,则buffer2是一个数组数组的数组。
这意味着item
是一个数组数组,item[0]
是一个数组,而不是一个元素。那并不意味着声明不会以某种方式工作,但是,除非你试图赢得某种javascript混淆竞赛,否则这不是好的代码,而且可能不是预期的。< / p>
编辑:这实际上是一种迭代数组的奇怪方式;也许这个宇宙中存在某种原因以这种方式迭代数组,但如果你的数组有任何元素会以某种方式评估为false ,它甚至不会遍历所有元素。
答案 1 :(得分:0)
由于您显示了部分代码,因此无法完全理解您的代码。如果大多数代码都是正确的,建议像这样交换array.push:
dataset.push(cities.clusters [item [0]] || 0);
dataset2.push(cities.clusters [item [0]] || 0);
如果缓冲区和缓冲区2不相同,这应该有效。