Array.prototype.splice()
基线 广泛可用
此功能已得到完善,并在许多设备和浏览器版本上运行。它自 2015 年 7 月.
试一试
语法
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。splice(start)
splice(start, deleteCount)
splice(start, deleteCount, item1)
splice(start, deleteCount, item1, item2)
splice(start, deleteCount, item1, item2, /* …, */ itemN)
js
参数
-
开始
- 从何处开始更改数组的零基索引,转换为整数。
- 负索引从数组末尾开始计数 - 如果
-array.length <= start < 0
,则使用start + array.length
。 - 如果
start < -array.length
,则使用0
。 - 如果
start >= array.length
,则不会删除任何元素,但该方法将作为添加函数,添加与提供元素一样多的元素。
- 如果
start
被省略(并且splice()
在没有参数的情况下被调用),则不会删除任何内容。这与传递undefined
不同,undefined
将被转换为0
。 -
deleteCount
可选一个整数,指示要从
start
中删除的数组中的元素数量。如果
deleteCount
被省略,或者它的值大于或等于start
指定的位置之后的元素数量,则将从start
到数组末尾的所有元素都删除。但是,如果您希望传递任何itemN
参数,则应将Infinity
作为deleteCount
传递以删除start
之后的所有元素,因为显式undefined
会 转换为0
。 - 如果
deleteCount
为0
或负数,则不会删除任何元素。在这种情况下,您应该至少指定一个新元素(见下文)。 -
item1
,…,itemN
可选要添加到数组中的元素,从
start
开始。
如果您没有指定任何元素,splice()
仅从数组中删除元素。
返回值
一个包含已删除元素的数组。
如果仅删除一个元素,则返回一个包含一个元素的数组。
描述
如果未删除任何元素,则返回一个空数组。
splice()
方法是一个 修改方法。它可能会更改 this
的内容。如果指定的插入元素数量与删除的元素数量不同,则数组的 length
也将更改。同时,它使用 [Symbol.species]
创建一个新的数组实例来返回。
如果删除的部分是 稀疏 的,则由 splice()
返回的数组也是稀疏的,这些相应的索引是空槽。
示例
splice()
方法是 泛型 的。它只期望 this
值具有 length
属性和整数键属性。虽然字符串也是类数组的,但此方法不适合应用于它们,因为字符串是不可变的。
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2, 0, "drum");
// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]
// removed is [], no elements removed
在索引 2 之前删除 0(零)个元素,并插入 "drum"
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2, 0, "drum", "guitar");
// myFish is ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
// removed is [], no elements removed
在索引 2 之前删除 0(零)个元素,并插入 "drum" 和 "guitar"
在索引 0 处删除 0(零)个元素,并插入 "angel"
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["clown", "mandarin", "sturgeon"];
const removed = myFish.splice(0, 0, "angel");
// myFish is ["angel", "clown", "mandarin", "sturgeon"]
// no items removed
splice(0, 0, ...elements)
像 unshift()
一样在数组开头插入元素。
在最后一个索引处删除 0(零)个元素,并插入 "sturgeon"
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["angel", "clown", "mandarin"];
const removed = myFish.splice(myFish.length, 0, "sturgeon");
// myFish is ["angel", "clown", "mandarin", "sturgeon"]
// no items removed
splice(array.length, 0, ...elements)
像 push()
一样在数组末尾插入元素。
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["angel", "clown", "drum", "mandarin", "sturgeon"];
const removed = myFish.splice(3, 1);
// myFish is ["angel", "clown", "drum", "sturgeon"]
// removed is ["mandarin"]
在索引 3 处删除 1 个元素
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["angel", "clown", "drum", "sturgeon"];
const removed = myFish.splice(2, 1, "trumpet");
// myFish is ["angel", "clown", "trumpet", "sturgeon"]
// removed is ["drum"]
在索引 2 处删除 1 个元素,并插入 "trumpet"
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["angel", "clown", "trumpet", "sturgeon"];
const removed = myFish.splice(0, 2, "parrot", "anemone", "blue");
// myFish is ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
// removed is ["angel", "clown"]
从索引 0 处删除 2 个元素,并插入 "parrot"、"anemone" 和 "blue"
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["parrot", "anemone", "blue", "trumpet", "sturgeon"];
const removed = myFish.splice(2, 2);
// myFish is ["parrot", "anemone", "sturgeon"]
// removed is ["blue", "trumpet"]
从索引 2 开始删除 2 个元素
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(-2, 1);
// myFish is ["angel", "clown", "sturgeon"]
// removed is ["mandarin"]
从索引 -2 处删除 1 个元素
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const myFish = ["angel", "clown", "mandarin", "sturgeon"];
const removed = myFish.splice(2);
// myFish is ["angel", "clown"]
// removed is ["mandarin", "sturgeon"]
从索引 2 开始删除所有元素
在稀疏数组上使用 splice()
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const arr = [1, , 3, 4, , 6];
console.log(arr.splice(1, 2)); // [empty, 3]
console.log(arr); // [1, 4, empty, 6]
splice()
方法保留数组的稀疏性。
在非数组对象上调用 splice()
要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用
toSpliced()
。要访问数组的一部分而不修改它,请参阅 slice()
。const arrayLike = {
length: 3,
unrelated: "foo",
0: 5,
2: 4,
};
console.log(Array.prototype.splice.call(arrayLike, 0, 1, 2, 3));
// [ 5 ]
console.log(arrayLike);
// { '0': 2, '1': 3, '3': 4, length: 4, unrelated: 'foo' }
规范
splice() 方法读取 this 的 length 属性。然后,它根据需要更新整数键属性和 length 属性。 |
---|
规范 # ECMAScript 语言规范 |
浏览器兼容性
sec-array.prototype.splice
另请参阅
- 启用 JavaScript 后。启用 JavaScript 以查看数据。
数组
Array.prototype.concat()
Array.prototype.push()
Array.prototype.pop()
Array.prototype.shift()
Array.prototype.slice()
Array.prototype.toSpliced()
Array.prototype.unshift()