Javascript数组没有得到正确的数据

时间:2012-12-17 15:25:11

标签: javascript jquery arrays

我有一个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分支中的数组。

我认为代码中必须包含某些东西,但我看不清楚。

由于

2 个答案:

答案 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不相同,这应该有效。