LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 142|回复: 0

添加/移除数组元素

[复制链接]
发表于 2024-1-24 23:20:01 | 显示全部楼层 |阅读模式
我们已经学了从数组的首端或尾端添加和删除元素的方法:

arr.push(...items) —— 从尾端添加元素,
arr.pop() —— 从尾端提取元素,
arr.shift() —— 从首端提取元素,
arr.unshift(...items) —— 从首端添加元素。
这里还有其他几种方法。

splice
如何从数组中删除元素?

数组是对象,所以我们可以尝试使用 delete:

let arr = ["I", "go", "home"];

delete arr[1]; // remove "go"

alert( arr[1] ); // undefined

// now arr = ["I",  , "home"];
alert( arr.length ); // 3
元素被删除了,但数组仍然有 3 个元素,我们可以看到 arr.length == 3。

这很正常,因为 delete obj.key 是通过 key 来移除对应的值。对于对象来说是可以的。但是对于数组来说,我们通常希望剩下的元素能够移动并占据被释放的位置。我们希望得到一个更短的数组。

所以应该使用特殊的方法。

arr.splice 方法可以说是处理数组的瑞士军刀。它可以做所有事情:添加,删除和插入元素。

语法是:

arr.splice(start[, deleteCount, elem1, ..., elemN])
它从索引 start 开始修改 arr:删除 deleteCount 个元素并在当前位置插入 elem1, ..., elemN。最后返回被删除的元素所组成的数组。

通过例子我们可以很容易地掌握这个方法。

让我们从删除开始:

let arr = ["I", "study", "JavaScript"];

arr.splice(1, 1); // 从索引 1 开始删除 1 个元素

alert( arr ); // ["I", "JavaScript"]
简单,对吧?从索引 1 开始删除 1 个元素。(译注:当只填写了 splice 的 start 参数时,将删除从索引 start 开始的所有数组项)

在下一个例子中,我们删除了 3 个元素,并用另外两个元素替换它们:

let arr = ["I", "study", "JavaScript", "right", "now"];

// 删除数组的前三项,并使用其他内容代替它们
arr.splice(0, 3, "Let's", "dance");

alert( arr ) // 现在 ["Let's", "dance", "right", "now"]
在这里我们可以看到 splice 返回了被删除的元素所组成的数组:

let arr = ["I", "study", "JavaScript", "right", "now"];

// 删除前两个元素
let removed = arr.splice(0, 2);

alert( removed ); // "I", "study" <-- 被从数组中删除了的元素
我们可以将 deleteCount 设置为 0,splice 方法就能够插入元素而不用删除任何元素:

let arr = ["I", "study", "JavaScript"];

// 从索引 2 开始
// 删除 0 个元素
// 然后插入 "complex" 和 "language"
arr.splice(2, 0, "complex", "language");

alert( arr ); // "I", "study", "complex", "language", "JavaScript"
允许负向索引
在这里和其他数组方法中,负向索引都是被允许的。它们从数组末尾计算位置,如下所示:

let arr = [1, 2, 5];

// 从索引 -1(尾端前一位)
// 删除 0 个元素,
// 然后插入 3 和 4
arr.splice(-1, 0, 3, 4);

alert( arr ); // 1,2,3,4,5

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表