JS數組將要增加的新方法:array.at(index)

2021-02-20 前端先鋒
// 每日前端夜話 第471篇
// 正文共:1200 字
// 預計閱讀時間:7 分鐘

除了普通對象之外,數組是 JavaScript 中使用最廣泛的數據結構。數組上最常使用的操作是按索引訪問元素。

本文介紹新的數組方法 array.at(index)。

新方法最主要好處是可以用負索引從數組末尾訪問元素,而平時使用的方括號語法 array[index] 則沒有辦法做到。

方括號語法的局限性

通常按索引訪問數組元素的方法是使用方括號語法 array[index]:

const fruits = ['orange', 'apple', 'banana', 'grape'];

const item = fruits[1];
item; // => 'apple'

表達式  array[index]  的執行結果是位於 index 位置的數組元素項,JavaScript 中數組的索引從 0 開始,這些你肯定知道。

通常方括號語法是一種通過正索引(>= 0)訪問數組元素的方法。它的語法簡單易讀。

但有時我們希望從末尾開始訪問元素。例如:

const fruits = ['orange', 'apple', 'banana', 'grape'];

const lastItem = fruits[fruits.length - 1];
lastItem; // => 'grape'

fruits[fruits.length-1] 是訪問數組最後一個元素的方式,其中fruits.length-1 是最後一個元素的索引。

問題在於方括號不允許直接從數組末尾訪問元素,也不能接受負索引。

幸運的是,一項新的提案(截至2021年1月的第3階段) (https://github.com/tc39/proposal-relative-indexing-method)將 at() 方法引入了數組(以及類型化數組和字符串),並解決了方括號的許多限制。

array.at() 方法

簡而言之,array.at(index) 用來訪問處於 index 位置的元素。

如果 index 是一個正整數  >= 0,則該方法返回這個索引位置的元素:

const fruits = ['orange', 'apple', 'banana', 'grape'];

const item = fruits.at(1);
item; // => 'apple'

如果 index 參數大於或等於數組長度,則像方括號語法一樣返回 undefined:

const fruits = ['orange', 'apple', 'banana', 'grape'];

const item = fruits.at(999);
item; // => undefined

當對 array.at() 方法使用負索引時,會從數組的末尾訪問元素。

例如用索引 -1 來訪問數組的最後一個元素:

const fruits = ['orange', 'apple', 'banana', 'grape'];

const lastItem = fruits.at(-1);
lastItem; // => 'grape'

下面是更詳細的例子:

const vegetables = ['potatoe', 'tomatoe', 'onion'];

vegetables.at(0); // => 'potatoe'
vegetables.at(1); // => 'tomatoe'
vegetables.at(2); // => 'onion'
vegetables.at(3); // => undefined

vegetables.at(-1); // => 'onion'
vegetables.at(-2); // => 'tomatoe'
vegetables.at(-3); // => 'potatoe'
vegetables.at(-4); // => undefined

如果 negIndex 是一個負索引  < 0,那麼 array.at(negIndex) 將會訪問位於索引 array.length + negIndex 處的元素。例如:

const fruits = ['orange', 'apple', 'banana', 'grape'];

const negIndex = -2;

fruits.at(negIndex);              // => 'banana'
fruits[fruits.length + negIndex]; // => 'banana'

總結

JavaScript 中的方括號語法是按索引訪問項目的常用方法。只需將索引表達式放在方括號 array[index] 中,然後既可以獲取在該索引處的數組項。

但是有時這種方式並不方便,因為它不接受負索引。所以要訪問數組的最後一個元素,需要用這種方法:

const lastItem = array[array.length - 1];

新的數組方法 array.at(index) 使你可以將索引作為常規訪問器訪問數組元素。此外,array.at(index)接受負索引,在這種情況下,該方法從頭開始獲取元素:

const lastItem = array.at(-1);

現在只需要把 array.prototype.at (https://github.com/es-shims/Array.prototype.at) polyfill 包含到你的應用程式中,就可以使用 array.at() 了。



強力推薦前端面試刷題神器



精彩文章回顧,點擊直達


相關焦點

  • JavaScript 數組新方法: array.at(index)
    除了普通對象之外,數組是 JavaScript 中廣泛使用的數據結構,而數組中常用操作是按索引訪問元素。在本文中,我們介紹新的數組方法array.at(index)。幸運的是,一個新的提議(截至2021年1月的第3階段)將at()方法引入了數組(以及類型化的數組和字符串),並解決了方括號訪問器的諸多限制。2.array.at() 方法簡單來說,array.at(index)訪問index參數處的元素。
  • 從 JS 數組操作到 V8 array.js
    常見方法為了簡單記憶,方便查找,將主要方法分為三類 : 數組可遍歷方法,會修改原數組方法,返回新數組方法。, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]「看看源碼v8中array.js」第1333行開始map之旅/**         * 一個由原數組每個元素執行回調函數的結果組成的新數組
  • JavaScript中原生Array數組方法詳解
    JS中,數組可以通過陣列構造函數或[]字面量的方式創建。數組是一個特殊的對象,繼承自對象原型,但用typeof運算判斷時,並沒有一個特定的值,仍然返回'對象'。但使用[] instanceof Array返回true。這說明,js中存在一個類數組的對象,就像字符串對象或arguments對象。
  • 超詳細的 JS 數組方法
    https://juejin.cn/post/6907109642917117965數組是 js 中最常用到的數據集合,其內置的方法有很多,熟練掌握這些方法,可以有效的提高我們的工作效率,同時對我們的代碼質量也是有很大影響。
  • 22個超詳細的 JS 數組方法
    https://juejin.cn/post/6907109642917117965數組是 js 中最常用到的數據集合,其內置的方法有很多,熟練掌握這些方法,可以有效的提高我們的工作效率,同時對我們的代碼質量也是有很大影響。
  • JS數組方法總結
    (start,end) 返回一個新數組,將所有從索引 start 到 end(不包括 end)的數組項複製到一個新的數組arr.concat(arr1,arr2,1,2) 拼接數組 生成一個新數組 可以傳入數組或者值arr.forEach((item,index,array)=>{}) 函數作為一個參數 為數組的每個元素都運行一個函數。
  • 超詳細的 JS 數組方法整理出來了
    https://juejin.cn/post/6907109642917117965數組是 js 中最常用到的數據集合,其內置的方法有很多,熟練掌握這些方法,可以有效的提高我們的工作效率,同時對我們的代碼質量也是有很大影響。
  • js--數組的reduce()累加方法的使用
    首先能夠想到的是設置一個初始值,然後通過循環遍歷這個數組,將數組中的值一項一項累加起來,然後返回這個設置的值就是最終的結果。這樣實現起來也不算太複測,不需要寫太多的代碼,這篇就介紹一個數組的進階一點的用法——reduce()的用法。正文定義:reduce() 方法接收一個函數作為累加器,數組中的每個值(從左到右)開始縮減,最終計算為一個值。
  • JavaScript Array對象
    Array對象方法方法描述語法concat()連接兩個或更多的數組,並返回結果。array1.concat(array2,array3,…,arrayX)every()檢測數組元素的每個元素是否都符合條件。array.every(function(currentValue,index,arr), thisValue)filter()檢測數組元素,並返回符合條件所有元素的數組。
  • JS幾種數組遍歷方式總結
    ){ console.log(value+","+index+","+array[index])})2. for-in循環是為了遍歷對象而設計的,事實上for-in也能用來遍歷數組,但定義的索引i是字符串類型的。
  • js中的Array對象屬性和方法整理
    描述:方法concat()將創建並返回一個新數組,這個數組是將所有參數都添加到array中生成的。它並不修改array。如果要進行concat()操作的參數是一個數組,那麼添加的是數組中的元素,而不是數組。
  • JS基礎知識整理-字符串和數組
    String.trim() 方法刪除字符串兩端的空白符數組 arr = [1, 2, 3]:通過索引訪問可以修改值( 不支持負索引) arr[index]length屬性 返回數組的長度合併現有一或多數組來創建一個新數組裁剪數組:slice(start, end) end默認裁剪剩餘全部迭代:arr.forEach(function (value, index, array) {}) 每個數組元素調用一次函數
  • 你真的了解JS中的數組嗎?——數組API的總結
    在JS中,數組是一個非常重要的知識點,不管是在面試還是在日常工作中,都非常需要;而該文章,不去深究數據的定義方法等,而只是總結相應的API並簡單的介紹相應方法的應用;如下圖所示,是我本篇文章介紹的相應的數組方法。
  • 聊聊JavaScript數組對象Array的用法
    二、JavaScript數組的特點1、js中Array數組的元素類型是可變的例如:var arr = [1,'2',false];2、在js中,數組的長度是可變的舉例說明一下:var三、JavaScript數組屬性length:表示數組的長度比如:var arr = [1,2,3,4]; 那麼他的長度:arr.length 為 4四、Array數組的方法
  • Js數組系列--reduce()方法詳解及使用技巧
    前言ECMAScript5 新增的歸併方法reduce():reduce() 方法接收一個函數作為累加器(迭代器),數組中的每個值(從左到右)開始縮減,最終計算為一個值。reduce() 可以作為一個高階函數,用於函數的 compose。
  • 程序江湖事——JS數組的知己知彼
    遍歷修改1. for循環這是和其他語言相通的一個方法,通過數組下標實現了對每一個數組內元素進行查看,也是最基礎的數組遍歷方法操作格式:arr.forEach(callback(currentValue [, index [, array]])[, thisArg]);其中currentValue是當前處理元素(注意不是數組下標),index是當前處理元素的數組下標(索引),array是當前處理的數組,thisArg是當執行回調函數 callback 時用作 this 的值。
  • js數組去重最常用的5種方法
    今天來聊一聊js數組去重的一些方法,包括一些網上看到的和自己總結的,總共5種方法,希望對大家有幫助。第一種:遍歷數組法這種方法最簡單最直觀,也最容易理解,代碼如下:這種方法很好理解,利用了indexOf()方法(indexOf()方法如果查詢到則返回查詢到的第一個結果在數組中的索引,如果查詢不到則返回-1)。
  • 如何運用PHP函數array_push()實現數組元素的增加
    如何運用PHP函數array_push()實現數組元素的增加 我們為大家介紹了如何使用PHP函數array_push()在數組的頭尾增加數據元素的方法,希望對初學PHP語言的朋友們有所幫助。
  • 【第1349期】談談JS數組中的indexOf方法
    Number 類型的使用大家可能會想 number 類型有沒有 indexOf 方法因為會做隱式轉換嘛!明確告訴大家沒有,上例子let num = 2016;num.indexOf(2); //Uncaught TypeError: num.indexOf is not a function非要對 number 類型使用 indexOf 方法嘞?
  • JS數組reduce()方法詳解及高級技巧
    reduce()方法可以搞定的東西,for循環,或者forEach方法有時候也可以搞定,那為啥要用reduce()?