JavaScript获取列表最后一个元素的N种方法
作者:detayun
在日常开发中,我们经常需要获取数组的最后一个元素,本文总结了JavaScript中获取数组最后一个元素的5种方法,还提供了处理空数组的安全写法和实际应用场景,希望可以帮助大家选择最适合的方案
前言
在日常开发中,我们经常需要获取数组的最后一个元素。比如获取最新的聊天记录、最新的股票价格、最新的订单信息等等。
看似简单的需求,其实有 N 种实现方式!今天就来总结一下 JS 中获取数组最后一个元素的所有方法,从最老的语法到最新的 ES2022 特性,一网打尽!
方法一览
| 序号 | 方法 | 兼容性 | 推荐度 | 代码量 |
|---|---|---|---|---|
| 1 | arr[arr.length - 1] | ✅ IE6+ | ⭐⭐⭐⭐⭐ | 1行 |
| 2 | arr.at(-1) | ✅ ES2022+ | ⭐⭐⭐⭐⭐ | 1行 |
| 3 | arr.slice(-1)[0] | ✅ IE9+ | ⭐⭐⭐⭐ | 1行 |
| 4 | arr.pop() | ✅ IE4+ | ⭐⭐ | 1行 |
| 5 | arr.reverse()[0] | ✅ IE4+ | ⭐ | 2行 |
方法详解
方法1:arr[arr.length - 1]⭐⭐⭐⭐⭐ 最经典
这是 最通用、最经典 的方法,兼容性最好,从 IE6 就支持了!
const list = [1, 2, 3, 4, 5]; const lastItem = list[list.length - 1]; console.log(lastItem); // 5
优点:
- 兼容性极好(IE6+)
- 性能最优
- 不会修改原数组
缺点:
代码稍长
方法2:arr.at(-1)⭐⭐⭐⭐⭐ 最简洁(ES2022)
ES2022 新增的方法,支持 负数索引,-1 就是最后一个!
const list = [1, 2, 3, 4, 5]; const lastItem = list.at(-1); console.log(lastItem); // 5
优点:
- 代码最简洁
- 语义清晰(
-1就是倒数第一个) - 不会修改原数组
缺点:
需要 ES2022+ 环境(Node.js 16+、现代浏览器)
浏览器兼容性:Chrome 92+、Firefox 90+、Safari 15.4+、Edge 92+
方法3:arr.slice(-1)[0]⭐⭐⭐⭐ 不修改原数组
slice(-1) 会返回一个包含最后一个元素的新数组,再取 [0] 即可。
const list = [1, 2, 3, 4, 5]; const lastItem = list.slice(-1)[0]; console.log(lastItem); // 5
优点:
- 不会修改原数组
- 代码简洁
缺点:
- 会创建新数组,性能略差
- IE8 不支持负数索引
方法4:arr.pop()⭐⭐ 会删除元素!
pop() 会删除并返回最后一个元素。
const list = [1, 2, 3, 4, 5]; const lastItem = list.pop(); console.log(lastItem); // 5 console.log(list); // [1, 2, 3, 4] ⚠️ 原数组被修改了!
优点:
代码最短
缺点:
会修改原数组! 一般不推荐
方法5:arr.reverse()[0]⭐ 会反转数组!
先反转数组,再取第一个元素。
const list = [1, 2, 3, 4, 5]; const lastItem = list.reverse()[0]; console.log(lastItem); // 5 console.log(list); // [5, 4, 3, 2, 1] ⚠️ 原数组被反转了!
优点:
代码短
缺点:
会修改原数组! 千万别用
性能对比
我用 console.time 做了个简单测试(100万次循环):
| 方法 | 耗时 | 性能排名 |
|---|---|---|
arr[arr.length - 1] | ~15ms | 🥇 第1名 |
arr.at(-1) | ~20ms | 🥈 第2名 |
arr.slice(-1)[0] | ~80ms | 🥉 第3名 |
arr.pop() | ~18ms | 第4名(但会修改数组) |
结论:arr[arr.length - 1] 性能最好,arr.at(-1) 紧随其后且代码最简洁!
安全写法(防止空数组)
如果数组可能为空,直接取会返回 undefined,建议加个判断:
const list = []; // ❌ 不安全 const last1 = list[list.length - 1]; // undefined // ✅ 安全写法1:三元运算 const last2 = list.length > 0 ? list[list.length - 1] : null; // ✅ 安全写法2:可选链 + 空值合并(ES2020+) const last3 = list.at(-1) ?? null; // ✅ 安全写法3:默认值 const last4 = list[list.length - 1] || '默认值';
实战场景
场景1:获取最新消息
const messages = [
{ id: 1, text: '你好' },
{ id: 2, text: '在吗' },
{ id: 3, text: '吃了吗' }
];
const lastMsg = messages.at(-1);
console.log(lastMsg.text); // '吃了吗'
场景2:获取最新股价
const prices = [10.5, 20.3, 15.8, 12.1, 18.9];
const latestPrice = prices[prices.length - 1];
console.log(`最新价格:${latestPrice}`); // 最新价格:18.9
场景3:兼容老浏览器
// 如果项目需要兼容 IE,用这个
function getLastItem(arr) {
return arr.length > 0 ? arr[arr.length - 1] : null;
}
最终推荐
| 场景 | 推荐方法 |
|---|---|
| 现代项目(ES2022+) | arr.at(-1) |
| 兼容老浏览器 | arr[arr.length - 1] |
| 不想修改原数组 + 简洁 | arr.slice(-1)[0] |
| 不推荐 | arr.pop()、arr.reverse()[0] |
总结
| 方法 | 代码 | 推荐指数 |
|---|---|---|
arr[arr.length - 1] | ⭐⭐⭐⭐⭐ | 兼容性之王 |
arr.at(-1) | ⭐⭐⭐⭐⭐ | 代码之王 |
arr.slice(-1)[0] | ⭐⭐⭐⭐ | 安全之选 |
arr.pop() | ⭐⭐ | ⚠️ 慎用 |
arr.reverse()[0] | ⭐ | ❌ 别用 |
一句话总结:现代项目用 at(-1),兼容老项目用 length - 1,其他的看看就好!
到此这篇关于JavaScript获取列表最后一个元素的N种方法的文章就介绍到这了,更多相关JavaScript获取列表最后一个元素内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
