Array.prototype.splice()

基线 广泛可用

此功能已得到完善,并在许多设备和浏览器版本上运行。它自 2015 年 7 月.

报告反馈

splice()Array 实例的方法,它通过删除或替换现有元素和/或添加新元素来更改数组的内容,就地

试一试

语法

要创建一个新的数组,其中包含已删除或替换的段,而不改变原始数组,请使用 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

如果 deleteCount0 或负数,则不会删除任何元素。在这种情况下,您应该至少指定一个新元素(见下文)。

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() 方法读取 thislength 属性。然后,它根据需要更新整数键属性和 length 属性。
规范
# ECMAScript 语言规范

浏览器兼容性

sec-array.prototype.splice

另请参阅