当前位置: 首页 > 知识库问答 >
问题:

JavaScript array.push()在多个(嵌套)数组之间复制[duplicate]

松英喆
2023-03-14

最近,我在尝试创建三级深度嵌套数组。我知道很疯狂,但这是我能想到的解决问题的最好办法。使用以下代码创建数组。

const lengths = [2, 3];

const arrays = lengths.map((v, i) => {
    return Array(lengths[i]).fill([]);
});

arrays[0][0].push(1);

console.log(arrays);
// Expected: [ [ [ 1 ], [] ], [ [], [], [] ] ]
// Actual: [ [ [ 1 ], [ 1 ] ], [ [], [], [] ] ]

如您所见,我只推到数组[0][0]。然而,[0][0]和[0][1]都被推到。这是怎么回事?它是一个bug,还是一个特性?某种奇怪的内存管理?

如果有用的话,我正在使用node.js。提前道谢。

共有1个答案

姜永贞
2023-03-14

您正在用相同的数组引用填充整个数组。相反,您可以使用array.from的映射回调来纠正这个问题,每次返回一个不同的数组。

null

const lengths = [2, 3];

const arrays = lengths.map((v, i) => {
    return Array.from({length: lengths[i]}, _=>[]);
});

arrays[0][0].push(1);

console.log(arrays);
.as-console-wrapper{top:0;max-height:100%!important}
 类似资料:
  • 我有一个函数返回包含2个数组的2个数组。 这些嵌套数组每个包含6个对象 我正在尝试迭代每个主2数组,并按类别返回嵌套数组的求和值,如下所示:记住,值当前是一个字符串。 我已经尝试了下面的,但我似乎不能得到它的权利,我看了许多这样的线程,我知道有吨类似的,但没有任何工作为我目前为止。蒂娅。 我可怜的尝试。

  • 问题内容: TL; DR -我该如何检查是否 之一的 和 所有的 嵌套数组满足规定的标准是什么? 我有一个。每个对象都有一个嵌套对象数组,这些对象本身都有一个嵌套对象列表。我需要对所有文档中 至少一个嵌套对象匹配的文档执行过滤器。当我说的比赛,我的意思是 所有 的嵌套对象的对象以某种方式相匹配。这是一个示例映射,以供参考; 如果文档没有/ 对象,则认为是匹配的。但是,更糟糕的是,内部对象需要考虑以

  • 如何根据数组的嵌套数组中的两个值参数进行查询?目标是返回具有和。 尝试了以下查询但没有成功。

  • 我有一个这样的数组: 中的数组包括另外两个数组(第一个不是必需的,但看看第二个(:这个数组包含不同的 x/y 坐标 ) 我想得到另一个数组的结果,如下所示(解释如下): 数组现在按其 x 值排序 ( -- 我不知道如何编码;这是我到目前为止所拥有的: 编辑:有一点忘记说了,就是应该分组的坐标的不应该大于。看下面的例子:

  • 我有以下JSON: 我希望能够将内容推送到与迭代 2 关联的任务数组中。如何正确查询并插入到正确的位置?这就是我到目前为止所拥有的,但它总是插入到与迭代 1 关联的任务数组中。 我已经看到了这个:MongoDB嵌套数组查询,但他只是试图推送到一个嵌套数组。

  • 问题内容: 我想复制一个2D列表,以便如果我修改一个列表,则不修改另一个列表。 对于一维列表,我只是这样做: 现在,如果我修改了b,a就不会修改。 但这不适用于二维列表: 如果我修改了b,a也会被修改。 我该如何解决? 问题答案: 对于不管尺寸多少都可以工作的更通用的解决方案,请使用: