[Javascript] 如何将项目插入到特定索引处的数组中?


Answers

您可以通过执行此操作来实现Array.insert方法:

Array.prototype.insert = function ( index, item ) {
    this.splice( index, 0, item );
};

然后你可以像这样使用它:

var arr = [ 'A', 'B', 'D', 'E' ];
arr.insert(2, 'C');

// => arr == [ 'A', 'B', 'C', 'D', 'E' ]
Question

我正在寻找一种Javascript数组插入方法,风格如下:

arr.insert(index, item)

最好在jQuery中,但任何Javascript实现都会在这一点上做。




我试过这个,它工作正常!

var initialArr = ["India","China","Japan","USA"];
initialArr.splice(index, 0, item);

索引是要插入或删除元素的位置。 0即第二个参数定义要删除的索引中元素的数量item是您想要在数组中创建的新条目。 它可以是一个或多个。

initialArr.splice(2, 0, "Nigeria");
initialArr.splice(2, 0, "Australia","UK");



除拼接外,您可以使用这种方法不会改变原始数组,但会使用添加的项目创建一个新数组。 只要有可能,你通常应该避免突变。 我在这里使用ES6传播运算符。

const items = [1, 2, 3, 4, 5]

const insert = (arr, index, newItem) => [
  // part of the array before the specified index
  ...arr.slice(0, index),
  // inserted item
  newItem,
  // part of the array after the specified index
  ...arr.slice(index)
]

const result = insert(items, 1, 10)

console.log(result)
// [1, 10, 2, 3, 4, 5]

这可以通过调整函数来添加多个项目,以便为新项目使用其他运算符,并将其传播到返回的结果中

const items = [1, 2, 3, 4, 5]

const insert = (arr, index, ...newItems) => [
  // part of the array before the specified index
  ...arr.slice(0, index),
  // inserted items
  ...newItems,
  // part of the array after the specified index
  ...arr.slice(index)
]

const result = insert(items, 1, 10, 20)

console.log(result)
// [1, 10, 20, 2, 3, 4, 5]




为了正确的函数编程和链接目的, Array.prototype.insert()的发明是必不可少的。 实际上,如果它已经返回了突变数组而非完全无意义的空数组,它实际上可能是完美的。 所以在这里

Array.prototype.insert = function(i,...rest){
  this.splice(i,0,...rest)
  return this
}

var a = [3,4,8,9];
document.write("<pre>" + JSON.stringify(a.insert(2,5,6,7)) + "</pre>");

好吧,上面的Array.prototype.splice()可以改变原始数组,并且有些人可能会抱怨“你不应该修改不属于你的东西”,那也可能是正确的。 因此,为了公共福利,我想给出另一个不会改变原始数组的Array.prototype.insert() 。 它在这里;

Array.prototype.insert = function(i,...rest){
  return this.slice(0,i).concat(rest,this.slice(i));
}

var a = [3,4,8,9],
    b = a.insert(2,5,6,7);
console.log(JSON.stringify(a));
console.log(JSON.stringify(b));




我建议在这种情况下使用纯JavaScript,JavaScript中也没有插入方法,但我们有内置Array的方法来完成这项工作,它被称为拼接...

我们来看看splice() ...

splice()方法通过删除现有元素和/或添加新元素来更改数组的内容。

好的,想象下面我们有这个数组:

const arr = [1, 2, 3, 4, 5];

我们可以像这样删除3

arr.splice(arr.indexOf(3), 1);

它会返回3,但如果我们现在检查arr,我们有:

[1, 2, 4, 5]

到目前为止,这么好,但我们如何使用拼接为数组添加新元素? 让我们回到3 ...

arr.splice(2, 0, 3);

让我们看看我们做了什么...

我们再次使用拼接 ,但是这次对于第二个参数,我们传递0 ,意味着我们不想删除任何项目,但是同时,我们添加第三个参数,它将被添加到第二个索引处。

你应该知道,我们可以同时删除添加 ,例如现在我们可以这样做:

arr.splice(2, 2, 3);

其中将删除索引2处的2个项目 ,然后在索引2处添加3个项目,结果将为:

[1, 2, 3, 5];

这显示了每个拼接项目的工作方式:

array.splice(start,deleteCount,item1,item2,item3 ...)