JS陣列at函式(獲取最後一個元素的方法)介紹

netcy發表於2022-06-15

本文介紹js中陣列的at函式,屬於比較簡單的知識普及性文章,難度不大。

0x00

首先,我們可以思考如下一個問題,如果要獲取一個陣列的最後一個元素(這是很常用的操作),我們應該怎麼做? 相信大部分人能夠想到的程式碼是這樣的:

let last = array[ array.length - 1];

嗯,這是最常用的獲取陣列最後一個元素的方式,依此類推獲取倒數第二個,第三個的方式類似。 當然除了這種方式之外,還有其他的方式,比如:

let last = array.slice(-1)[0]

先通過slice獲取後面一個元素的陣列,然後通過下標0獲取最後一個元素。

在比如通過pop獲取最後一個元素:

let last = array.pop()

但是 通過pop的方式會改變陣列本身,所以一般不建議用。

0x01

無論試用上面那種方式,都感覺很繁瑣。 這就讓人羨慕python裡面的陣列操作,可以通過負索引的方式獲取最後一個元素,程式碼如下:

last = array[-1]

js裡面不支援負索引的方式。 不過es6新增了一個at方法,可以獲取陣列的指定索引的元素,並且支援負索引。負索引從後往前計算,-1表示最後一個,-2 表示倒數第二個,依此類推。

因此試用此方法獲取最後一個元素會變得簡單很多。程式碼如下:

let last = array.at(-1)

0x02

如果瀏覽器還不支援這個方法,可以Polyfill:

function at(n) {
    // ToInteger() abstract op
    n = Math.trunc(n) || 0;
    // Allow negative indexing from the end
    if (n < 0) n += this.length;
    // OOB access is guaranteed to return undefined
    if (n < 0 || n >= this.length) return undefined;
    // Otherwise, this is just normal property access
    return this[n];
}

const TypedArray = Reflect.getPrototypeOf(Int8Array);
for (const C of [Array, String, TypedArray]) {
    Object.defineProperty(C.prototype, "at",
                          { value: at,
                            writable: true,
                            enumerable: false,
                            configurable: true });
}

參考 https://github.com/tc39/propo...

0x03

如果對前端和視覺化感興趣,可以和我交流, 關注公號“ITMan彪叔” 可以獲取作者微訊號,及時收到更多有價值的文章。

相關文章