javascript - 为什么当我更新父数组中的嵌套数组而其他子数组收到相同的值时?
问题描述
当我尝试通过填充创建一个数组数组时,我遇到了一个奇怪的情况,然后我尝试向第一个孩子添加一些值,我看到所有其他嵌套数组也收到了这个值。我知道它为什么会发生。看起来该fill
属性使用所有 3 个嵌套“地点\项目”的相同对象,现在每个项目都是对单个数组的引用。
另外,我尝试使用.fill(new Array())而不是文字表达式,但结果相同。
我不确定我是否正确,如果我错过了什么,请修复我。谢谢
// an amount of the required output arrays
const requiredArrays = 3;
const cols = new Array(requiredArrays).fill([]);
cols[0].push({id: 1})
预期结果:
[
[
{
"id": 1
}
],
[],
[]
]
实际结果:
[
[
{
"id": 1
}
],
[
{
"id": 1
}
],
[
{
"id": 1
}
]
]
PS实现我想要的结果的正确方法是什么?我应该只使用for 循环并通过孩子填充父数组还是存在一些更好的方法?
解决方案
来自MDN 的填充文档:
如果第一个参数是一个对象,则数组中的每个槽都将引用该对象。
这意味着您将获得一个对同一数组(也是一个对象)的引用数组。
至于如何以更好的方式做到这一点......这取决于你想要实现的目标。为什么需要数组数组?它们都有固定的长度吗?
推荐阅读
- java - 计时器需要很长时间才能启动
- r - 在循环期间使用 rbind 添加 0 值
- node.js - 如何在当前 HTML 页面上使用 express 从 res.json 呈现 json 对象
- python - 如何更新用户输入之间的情节?
- firebase - 如何保护用作 Diaglogflow / Google Action 主机的 Google 云功能
- sql - 这个简单的 SQL 表达式有什么问题?
- cordova - 在应用程序购买 2 在 android 上返回交易数据 null
- elasticsearch - 根映射定义具有不受支持的参数:[_timestamp : {enabled=true}]
- python - 查找多个变量的每组行之间的相关性
- docker - 有没有办法创建一个不在默认位置的 docker 卷?