我正在寻找一种 JavaScript 数组插入方法,样式如下:
arr.insert(index, item)
最好在 jQuery 中,但此时任何 JavaScript 实现都可以。
我正在寻找一种 JavaScript 数组插入方法,样式如下:
arr.insert(index, item)
最好在 jQuery 中,但此时任何 JavaScript 实现都可以。
您需要本splice
机数组对象上的函数。
arr.splice(index, 0, item);
将插入item
到arr
指定的位置index
(先删除0
项目,也就是说,它只是一个插入)。
在这个例子中,我们将创建一个数组并将一个元素添加到索引 2 中:
var arr = [];
arr[0] = "Jani";
arr[1] = "Hege";
arr[2] = "Stale";
arr[3] = "Kai Jim";
arr[4] = "Borge";
console.log(arr.join()); // Jani,Hege,Stale,Kai Jim,Borge
arr.splice(2, 0, "Lene");
console.log(arr.join()); // Jani,Hege,Lene,Stale,Kai Jim,Borge
您可以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' ]
除了 splice 之外,您可以使用这种方法,它不会改变原始数组,但会使用添加的项目创建一个新数组。您通常应该尽可能避免突变。我在这里使用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]
这可用于通过稍微调整函数以将 rest 运算符用于新项目来添加多个项目,并将其扩展到返回的结果中:
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]
insert
方法/* Syntax:
array.insert(index, value1, value2, ..., valueN) */
Array.prototype.insert = function(index) {
this.splice.apply(this, [index, 0].concat(
Array.prototype.slice.call(arguments, 1)));
return this;
};
它可以插入多个元素(如本机splice
那样)并支持链接:
["a", "b", "c", "d"].insert(2, "X", "Y", "Z").slice(1, 6);
// ["b", "X", "Y", "Z", "c"]
/* Syntax:
array.insert(index, value1, value2, ..., valueN) */
Array.prototype.insert = function(index) {
index = Math.min(index, this.length);
arguments.length > 1
&& this.splice.apply(this, [index, 0].concat([].pop.call(arguments)))
&& this.insert.apply(this, arguments);
return this;
};
它可以将参数中的数组与给定数组合并,还支持链接:
["a", "b", "c", "d"].insert(2, "V", ["W", "X", "Y"], "Z").join("-");
// "a-b-V-W-X-Y-Z-c-d"
演示: http : //jsfiddle.net/UPphH/
如果您想一次将多个元素插入到一个数组中,请查看这个 Stack Overflow 的答案:A better way to splice an array into an array in javascript
这里还有一些函数来说明这两个例子:
function insertAt(array, index) {
var arrayToInsert = Array.prototype.splice.apply(arguments, [2]);
return insertArrayAt(array, index, arrayToInsert);
}
function insertArrayAt(array, index, arrayToInsert) {
Array.prototype.splice.apply(array, [index, 0].concat(arrayToInsert));
return array;
}
最后这里是一个 jsFiddle,所以你可以自己看看:http : //jsfiddle.net/luisperezphd/Wc8aS/
这就是您使用这些功能的方式:
// if you want to insert specific values whether constants or variables:
insertAt(arr, 1, "x", "y", "z");
// OR if you have an array:
var arrToInsert = ["x", "y", "z"];
insertArrayAt(arr, 1, arrToInsert);