array.push()不是我打算做的

时间:2014-09-29 00:51:27

标签: javascript arrays object

我遇到了一个真正愚蠢的问题。我试图使用D3.js动态绘制数据(一些人)。

  1. 每当发生更改时,我都会从firebase数据库中获取记录数据。在这里,我用一个带有一些静态分数数据的对象来模仿它
  2. 我在记录中添加了时间键/值对
  3. 然后我想通过创建一个名为data的数组来为D3准备数据,我每秒都会在其上添加记录。我使用数组推送方法并使用data.push(record)
  4. 传入记录
  5. 我将记录对象放在控制台上,这很好地做了什么。 5.tit但是对于所有元素,还有过去的那些,当前时间值(tahre比0,1,2,3,4,..... / LI>

    我坚持了3个小时,不管你信不信。

    如果有人可以帮助我。感谢

     var data = [];
      record = {Fanny : 40, Joe : 20};
      var time = 0;
    
      record["time"] = time;
    
      console.log(record);
    
    
      myTimer = setInterval(function () {
    
    
        time = time + 1;
    
        record.time = time; 
    
        console.log(record);
    
        data.push(record);
    
    
        for (i = 0; i < data.length; i++) { 
              console.log(data[i].time)
    
        }
      },1000);
    

2 个答案:

答案 0 :(得分:2)

您需要为每次迭代创建一个新的record

现在,您只有相同的单曲(但在数组中重复多次)record并继续更新。

data.push({ Fanny: 40, Joe: 20, time: time });

答案 1 :(得分:0)

您可能正在处理引用问题,这意味着说

a是一个对象

a.name = 'toto';
var b = a;
b.name = 'titi';

console.log(a.name) // will output 'titi'

解决这个问题的一种方法是做不那么漂亮的

var b = JSON.parse(JSON.stringify(a));

打破引用