【问题标题】:Why all the object's keys set out to the values when I am trying to set only one object's key?当我试图只设置一个对象的键时,为什么所有对象的键都设置为值?
【发布时间】:2021-06-04 09:29:15
【问题描述】:

我在数组中存储了一些空对象意味着在数组中存储了一些空对象,其中键值对使用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;
    });

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

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

例如,当尝试设置第 5 个对象时,假设 trackID25 的值 ab57 分别:

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

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

【问题讨论】:

    标签: node.js arrays object arrayobject


    【解决方案1】:

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

    你可以通过复制对象来防止这个问题。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 2016-01-19
      • 2012-02-26
      • 2011-12-12
      相关资源
      最近更新 更多