JavaScript 中获取数组最后一个元素4种方法及性能

18,762 阅读6分钟

当需要从 JavaScript 中的数组中获取最后一个元素时,有多种选择,本文将提供 4 种可用方法。

1. 数组 length 属性

length 属性返回数组中元素的数量。在 JavaScript 中,数组索引编号从 0 开始,所以从数组的长度中减去 1 得到数组最后一个元素的索引( length-1),使用它可以访问最后一个元素。

const arrayList = ["第一个元素", "第二个元素", "第三个元素", "最后一个元素"];
const length = arrayList.length;
console.log(arrayList[length - 1]); // 最后一个元素

2. 数组 slice() 方法

slice() 方法从一个数组中返回特定的元素,作为一个新的数组对象。此方法选择从给定开始索引开始到给定结束索引结束的元素,不包括结束索引处的元素。
slice() 方法不会修改现有数组,提供一个索引值返回该位置的元素,负索引值从数组末尾计算索引。数组匹配的解构赋值用于从 slice() 方法返回的数组中获取元素。

const arrayList = ["第一个元素", "第二个元素", "第三个元素", "最后一个元素"];
const length = arrayList.length;
console.log(arrayList.slice(-1)); // 最后一个元素

3. 数组 pop() 方法

pop() 方法从数组中删除最后一个元素并将其返回,此方法会修改原来的数组
注意: 如果数组为空,则返回 undefined 并且不修改数组。

const arrayList = ["第一个元素", "第二个元素", "第三个元素", "最后一个元素"];
const length = arrayList.length;
console.log(arrayList.pop()); // 最后一个元素
console.log(arrayList); // ['第一个元素', '第二个元素', "第三个元素"]

4. 数组 at() 方法

at(index) 方法接收一个整数值并返回该索引对应的元素,允许正数和负数。负整数从数组中的最后一个元素开始倒数
index 要返回的数组元素的索引(位置)
返回值 匹配给定索引的数组中的元素。如果找不到指定的索引,则返回 undefined

const arrayList = ["第一个元素", "第二个元素", "第三个元素", "最后一个元素"];
console.log(arrayList.at(-1)); // 最后一个元素

性能比较

const arrayList = ["第一个元素", "第二个元素", "最后一个元素"];
const arrayList = ["第一个元素", "第二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "第三个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素", "最后五个元素", "最后四个元素", "最后三个元素", "最后二个元素", "最后一个元素"];
console.time("==> length");
const length = arrayList.length;
const lastElement1 = arrayList[length - 1];
console.log(lastElement1);
console.timeEnd("==> length");

console.time("====> slice");
const lastElement2 = arrayList.slice(-1);
console.log(lastElement2);
console.timeEnd("====> slice");

console.time("======> at");
const lastElement3 = arrayList.at(-1);
console.log(lastElement3);
console.timeEnd("======> at");

console.time("======> pop");
const lastElement4 = arrayList.pop();
console.log(lastElement4);
console.timeEnd("======> pop");

所用谷歌版本109.0.5414.120,输出的结果如下:

// 数组长度小
15:41:52.197 VM938:7 最后一个元素
15:41:52.197 VM938:8 ==> length: 0.120849609375 ms
15:41:52.197 VM938:12 ['最后一个元素']
15:41:52.197 VM938:13 ====> slice: 0.266845703125 ms
15:41:52.197 VM938:17 最后一个元素
15:41:52.197 VM938:18 ======> at: 0.072998046875 ms
15:41:52.197 VM938:22 最后一个元素
15:41:52.197 VM938:23 ======> pop: 0.071044921875 ms

// 数组长度大
15:42:37.396 VM995:5 最后一个元素
15:42:37.396 VM995:6 ==> length: 0.065673828125 ms
15:42:37.396 VM995:10 ['最后一个元素']
15:42:37.396 VM995:11 ====> slice: 0.14111328125 ms
15:42:37.397 VM995:15 最后一个元素
15:42:37.397 VM995:16 ======> at: 0.021728515625 ms
15:42:37.397 VM995:20 最后一个元素
15:42:37.397 VM995:21 ======> pop: 0.02685546875 ms

总结

当数组长度小时 pop() 方法是最快的,如果可以修改数组,则可以使用它
但当数组长度变大时, at() 方法持平或超越 pop() 方法
数组 slice() 方法是最慢的
数组 length 属性属于最常用的方法