这是一个基础但高频的 JavaScript 面试题。删除数组最后一个元素有多种方法,以下是几种常用方式及其区别:
✅ 方法一:pop()
—— 最常用、最推荐
const arr = [1, 2, 3, 4];
const lastElement = arr.pop(); // 删除并返回最后一个元素
console.log(lastElement); // 4
console.log(arr); // [1, 2, 3]
✅ 特点:
- 改变原数组
- 返回被删除的元素
- 时间复杂度:O(1)
- 推荐用于大多数场景
✅ 方法二:length
属性 —— 简洁但不返回值
const arr = [1, 2, 3, 4];
arr.length = arr.length - 1; // 或直接 arr.length--
console.log(arr); // [1, 2, 3]
✅ 特点:
- 改变原数组
- 不返回被删除的元素
- 可以一次性删除多个元素(如
arr.length = 2
) - 性能好,但可读性略差
✅ 方法三:splice()
—— 通用删除方法
const arr = [1, 2, 3, 4];
const removed = arr.splice(-1, 1); // 从倒数第一个开始,删除1个
console.log(removed); // [4](返回的是数组)
console.log(arr); // [1, 2, 3]
✅ 特点:
- 改变原数组
- 返回被删除元素组成的数组
- 功能强大,可删除任意位置的元素
- 性能略低于
pop()
(但差异极小)
✅ 方法四:slice()
—— 不改变原数组(函数式编程风格)
const arr = [1, 2, 3, 4];
const newArr = arr.slice(0, -1); // 截取从开始到倒数第一个之前
console.log(newArr); // [1, 2, 3]
console.log(arr); // [1, 2, 3, 4](原数组不变)
✅ 特点:
- 不改变原数组
- 返回一个新数组
- 适合函数式编程或需要保留原数组的场景
- 需要额外内存存储新数组
✅ 方法五:filter()
—— 函数式方法(不推荐用于此场景)
const arr = [1, 2, 3, 4];
const newArr = arr.filter((_, index) => index !== arr.length - 1);
console.log(newArr); // [1, 2, 3]
⚠️ 缺点:
- 遍历整个数组,性能差(O(n))
- 冗余,不适合简单删除操作
✅ 总结(面试回答模板)
删除数组最后一个元素最常用的方法是
pop()
,它直接修改原数组并返回被删除的元素,性能好且语义清晰。其他方法:
length--
:简洁,但不返回值;splice(-1, 1)
:功能强大,适合复杂删除;slice(0, -1)
:不修改原数组,适合函数式编程;推荐使用
pop()
,除非有特殊需求(如不可变性)。⚠️ 注意:
pop()
和splice()
会改变原数组,使用时需确认是否允许修改原数据。
THE END