我需要创建填充对象的数组。可以说{ foo: 0}
。然后我想添加属性bar
每个对象具有不同的值。例如:值 = 数组中项目的索引。
看起来像这样
const table = new Array(10).fill({foo: 0});
for (let i = 0; i < table.length; i += 1) {
table[i].bar = i;
}
我期望得到的是:
[
{ foo: 0, bar: 0 },
{ foo: 0, bar: 1 },
{ foo: 0, bar: 2 },
...
{ foo: 0, bar: 9 }
]
我得到了什么:
[
{ foo: 0, bar: 9 },
{ foo: 0, bar: 9 },
{ foo: 0, bar: 9 },
...
{ foo: 0, bar: 9 }
]
为什么会这样?我哪里出错了?
<强> DEMO
编辑 澄清一下
我不想用像 table[i] = {foo: 0, bar: i}
这样的新对象替换数组中的对象。它创建新对象来替换旧对象。
我只想向现有对象添加属性。
最佳答案
您的数组具有对单个对象的引用。所以发生的情况是,您正在更新相同的底层对象。如果您熟悉 C,这就像有 N 个指向同一个底层对象的指针。无论你操作哪个N指针,都会改 rebase 础底层对象。
const table = new Array(10)
for (let i = 0; i < table.length; i += 1) {
table[i] = {foo: 0, bar: i}
}
这将为数组中的每个条目创建一个新对象
关于javascript - 使用循环用对象填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51502234/