首页 > 解决方案 > 为什么当我更新父数组中的嵌套数组而其他子数组收到相同的值时?

问题描述

当我尝试通过填充创建一个数组数组时,我遇到了一个奇怪的情况,然后我尝试向第一个孩子添加一些值,我看到所有其他嵌套数组也收到了这个值。我知道它为什么会发生。看起来该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 循环并通过孩子填充父数组还是存在一些更好的方法?

标签: javascriptarrays

解决方案


来自MDN 的填充文档

如果第一个参数是一个对象,则数组中的每个槽都将引用该对象。

这意味着您将获得一个对同一数组(也是一个对象)的引用数组。

至于如何以更好的方式做到这一点......这取决于你想要实现的目标。为什么需要数组数组?它们都有固定的长度吗?


推荐阅读