为什么当我试图只设置一个对象的键时,所有对象的键都设置为值?

Why all the object's keys set out to the values when I am trying to set only one object's key?

I have stored some empty objects inside the array 表示在数组中存储了一些空对象,键值对使用 for-loop 生成。 这是我的做法:

 var events = [], obj, n = 100;
    obj = {
    a: 0,
    b:{},
    "timestamp":new Date()
    };
    
    for(var i=0;i<n;i++)
    {
      events.push(obj);
    }
    events.forEach((item, i) => {
      for(var i=0;i<40;i++)
      item.b["trackID"+i] = 0;
    });

所以最终的事件数组变成包含 100 个对象,所有键都初始化为零。

现在我想手动设置任何特定的键,但我面临的问题是所有对象中的所有键都会更新为相同的值,无论我设置哪个键。我只想将值设置为相应的对象键。为什么这里出了什么问题?

例如,当尝试设置第 5 个对象时假设 ab of trackID25 分别为 57

events[4].a = 5
events[4].b.trackID25 = 7

但是所有事件对象的键a和b(trackIDs)键分别设置为5和7的值。 为什么会这样?????

Javascript 将对象视为内存引用,因此您推入数组的内容基本上是指向相同内存地址的相同对象。

您可以通过复制对象来避免这个问题。

这个问题有很多解决方案,但我建议您使用 lodash.deepClone() 来解决。

如果您更喜欢本机解决方案,复制对象的最简单方法是 JSON.parse(JSON.stringify(obj))