六维教程

JavaScript 数组增删改

上一篇文章 JavaScript 数组基本操作 讲了数组的创建和读写。这一节讲如何往数组里添加元素、删除元素和替换元素。

数组的增删改围绕三个位置展开,分别是尾部、头部和任意位置,对应三组方法。push 和 pop 操作尾部,unshift 和 shift 操作头部,splice 操作任意位置。

尾部操作 push 和 pop

push 在数组末尾添加元素,可以一次加多个,返回新数组的长度。

const fruits = ['苹果', '香蕉'];
const len = fruits.push('橙子');
console.log(len);
console.log(fruits);

第一行输出 3,第二行输出 ['苹果', '香蕉', '橙子']。push 一次添加多个元素时,参数用逗号隔开。

pop 删除末尾的一个元素,返回被删除的元素。

const fruits = ['苹果', '香蕉', '橙子'];
const removed = fruits.pop();
console.log(removed);
console.log(fruits);

第一行输出 橙子,第二行输出 ['苹果', '香蕉']。pop 不需要参数,每次只删一个。

push 和 pop 配合使用,就是后进先出的栈结构,先加进去的元素最后才被取出来。

头部操作 unshift 和 shift

unshift 在数组开头添加元素,返回新数组的长度。用法和 push 一样,只是方向相反。

const nums = [2, 3];
const len = nums.unshift(1);
console.log(len);
console.log(nums);

第一行输出 3,第二行输出 [1, 2, 3]。

shift 删除开头的元素,返回被删除的元素。

const nums = [1, 2, 3];
const first = nums.shift();
console.log(first);
console.log(nums);

第一行输出 1,第二行输出 [2, 3]。

头部操作会移动后面所有元素的位置,数据量大时性能不如尾部操作,日常场景感受不到差别。

任意位置操作 splice

splice 是数组增删改的万能方法,完整形式是 splice(起始位置, 删除个数, 新元素1, 新元素2)。同一个方法,通过调整参数就能实现删除、插入、替换三种操作。

第一个场景是删除。传入起始位置和删除个数,不传新元素。

const arr = ['a', 'b', 'c', 'd'];
arr.splice(1, 2);
console.log(arr);

输出 ['a', 'd']。从索引 1 开始删 2 个,删掉了 b 和 c。

第二个场景是插入。删除个数传 0,后面的参数就是插入的新元素,插在起始位置。

const arr = ['a', 'b'];
arr.splice(1, 0, 'x', 'y');
console.log(arr);

输出 ['a', 'x', 'y', 'b']。从索引 1 开始,一个都不删,插入 x 和 y。

第三个场景是替换。删除个数和插入元素都有,相当于先删后插。

const arr = ['a', 'b', 'c'];
arr.splice(1, 1, 'X');
console.log(arr);

输出 ['a', 'X', 'c']。索引 1 位置的 b 被替换成 X。splice 的返回值是被删除元素组成的数组,没有删除时返回空数组。

方法对比

方法 作用位置 作用 返回值 是否修改原数组
push 尾部 添加 新数组长度 是
pop 尾部 删除 被删除的元素 是
unshift 头部 添加 新数组长度 是
shift 头部 删除 被删除的元素 是
splice 任意位置 增删改 被删除元素组成的数组 是

这五个方法有一个共同点,都会直接修改原数组。后面要讲的 slice 不会修改原数组,两者别搞混。

小结

push 和 pop 操作尾部,unshift 和 shift 操作头部,splice 操作任意位置,能增能删能替换。它们都会直接修改原数组。记不住时查上面这张表就行。

上一篇
JavaScript 数组基本操作
下一篇
JavaScript 遍历数组