在类似数组的对象中添加/删除元素

时间:2016-10-02 14:53:38

标签: javascript

我有一个类似数组的对象:

[1:Array[10], 2: Array[2], 3: Array[2], 4: Array[2], 5: Array[3], 6: Array[1]]

我试图删除前两个元素,做一些事情,然后再将它们插入同一个地方。

这就是我的所作所为:

array = Array.prototype.splice.call(array, 0,2);

在Firefox中记录array时会显示:

Array [ <2 empty slots>, Array[1], Array[2], Array[3], Array[1] ]

对我来说很好,我删除了前两个元素,现在数组以2个空插槽开头。

所以现在,我希望做的是在这两个空插槽中添加对象。

为简单起见,我们从数组中删除项目,然后在同一个地方再次插入:

var twoFirstItems = Array.prototype.slice.call(array, 0,2);
array = Array.prototype.splice.call(array, 0,2);

现在,重新插入twoFirstItems我认为我可以这样做:

array.unshift(twoFirstItems)

这不能按预期工作,它会插入数组,但它没有像修改前那样的key。我认为这与unshiftarray-like object的{​​{1}}不同,与array的工作方式不同。

那么如何正确删除/插入元素到array-like-object

如果我执行以下操作:

  console.log(array);
  console.log(typeof array);

结果:

Array [ <1 empty slot>, Array[2], Array[2], Array[2], Array[3], Array[1] ]
object

1 个答案:

答案 0 :(得分:1)

没有任何复杂情况,您只需re-assign该索引处的已修改数组。

var a = [
  [1, 2, 3, 4, 5, 6],
  [1, 2, 3, 4, 5, 6],
  [1, 2, 3, 4, 5, 6],
  [1, 2, 3, 4, 5, 6]

]

a[0] = a[0].map((el) => el * 10)
a[1] = a[1].map((el) => el * 20)

console.log(a)