【问题标题】:Push method with new Array [duplicate]带有新数组的推送方法[重复]
【发布时间】:2017-05-29 10:08:36
【问题描述】:

我想在二维空数组中推送一些元素,但我发现推送方法有问题。

var a = [[],[],[]]; 
a[1].push(1);
console.log(a);
//result: [ [], [ 1 ], [] ]

上面的代码会得到正确的结果,但是如果我使用新的 Array 方法,push 方法总是推送到所有索引。我是不是做错了什么?

var a = new Array(3).fill([]);
// a = [[], [], []]  
a[1].push(1);
console.log(a);
//result: [ [ 1 ], [ 1 ], [ 1 ] ], 
//but I think it should be [ [], [ 1 ], [] ] if I only push 1 to a[1]

【问题讨论】:

  • 你在等什么结果?

标签: javascript arrays


【解决方案1】:

第一个 sn-p 创建 3 个不同的子数组并将它们存储在 a a[0]a[1]a[2]。修改a[1]时,a[0]a[2]不生效。

第二个 sn-p 创建 1 个子数组并将其存储在 a 中 3 次,分别位于 a[0]a[1]a[2]。当你修改 a[1] 时,a[0]a[2] 也会被修改,因为它们都包含相同的数组。

【讨论】:

    【解决方案2】:

    没错。根据docs:fill() 方法用静态值填充所有元素。

    【讨论】:

    • 但是这里的问题是一旦使用了填充,他应该被允许更改单个元素
    【解决方案3】:

    这样使用,fill() 将您的值放入数组中的每个索引中。要根据需要使用它,您应该尝试 fill(value, start, end) 其中 start 是您要填充值的第一个索引,而 end 是最后一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 2021-09-12
      • 2019-05-07
      • 1970-01-01
      相关资源
      最近更新 更多