Javascript 修改对象数组时的奇怪行为

Javascript 修改对象数组时的奇怪行为,javascript,Javascript,我有一个初始化如下的对象数组: const balances=Array5.fill{} 稍后,我将使用以下命令修改第一个对象的平衡: 余额[0]['美元]=1000 我预计这只会改变第一个指数的平衡。相反,为所有元素设置“USD”键: 余额//[{美元:1000},{美元:1000},{美元:1000},{美元:1000},{美元:1000}] //当我预料到这一点时: 结余//[{美元:1000},{},{},{},{},{}] 您正在用相同的对象填充数组。我们可以通过使用 您需要为每个插槽

我有一个初始化如下的对象数组:

const balances=Array5.fill{} 稍后,我将使用以下命令修改第一个对象的平衡:

余额[0]['美元]=1000 我预计这只会改变第一个指数的平衡。相反,为所有元素设置“USD”键:

余额//[{美元:1000},{美元:1000},{美元:1000},{美元:1000},{美元:1000}] //当我预料到这一点时: 结余//[{美元:1000},{},{},{},{},{}] 您正在用相同的对象填充数组。我们可以通过使用

您需要为每个插槽构造一个对象—FP(如果不一定美观或高效的话)是这样做的

> balances = Array(5).fill(null).map(() => ({}))
(5) [{…}, {…}, {…}, {…}, {…}]
> balances[0] === balances[1]
false
一个非计划生育的、老派的、强制性的、但比上面提到的要快79%的人,通过一个快速的基准方法就是简单的

var balances = [];
for(let i = 0; i < 5; i++) balances.push({});
可以与映射函数一起使用,用不同的对象填充数组

const balances = Array.from({length: 5}, _=>({}));

为什么使用向下投票?填充对数组中的每个插槽使用相同的精确值。所以对同一个对象的引用。
const balances = Array.from({length: 5}, _=>({}));