參考資料:
卡斯伯七種常見陣列處理方法
JavaScript 陣列方法簡介
在閱讀完卡斯伯老師文章,我將整理文章中處理陣列方法,並搭配自己的練習輔助說明。對了補充說明:陣列處理方式在IE8以前是不支援的!
首先,我們先簡單寫一個陣列
1 | var restaurant=[ |
forEach()方法
簡介:會對陣列每個元素都執行一次,但不會有回傳值
1 | var forEach = |
說明:item以這裡為範例的話,代表物件中的值
map()方法
簡介:跟forEach相比多了回傳值,並透過函式回傳值組合成一個新的陣列適合將原始的變數運算後重新組合一個新的陣列
特性:
1.如果不回傳則是undefined
2,回傳數量等於原始陣列長度
1 | var mapArray=restaurant.map(function (item,index,array) { |
補充:return 一個值必須使用有一個變數接受資料!
filter()方法
會回傳符合條件的元素,得到一個新陣列。若不符合條件則會得到一個空陣列。適合用在搜尋與過濾資料 會獲得一個陣列
1 | var filterArray= |
find()方法
只會回傳一次值,且是第一個滿足條件的元素值,若沒有則會回傳undefined
1 | var findArray = |
every()方法
用來檢查所有陣列是否符合條件,僅會回傳一個值true
或false
1 | var everyArray = |
some()方法
都是回傳 true or false,差異僅在 every() 需完全符合,some() 僅需要部分符合。
1 | var someArray = |
reduce()方法
將Accumulator及陣列中每項元素(由左至右)傳入回呼函式,並產生一個值
參數介紹:
Accumulator::
前一個參數,如果是第一個陣列的話,值是以另外傳入或初始化的值
currentValue: 當前變數
currentIndex: 當前索引
array: 全部陣列
1 | var reduceArray= |
下面內容為文章內容以外,更新一些常用陣列方法
Sort()方法
Sort影片教學 MDN參考資料
這要用來針對資料進行排序,會return -1、0、1 會回傳一個陣列
原理說明:
預設的排序順序是根據字串的 Unicode 編碼位置(code points)而定。
穩定排序:指的是如果比較數值相同,不會調整原始資料順序
用法有兩種:
1.直接針對資料sort(),通常用在value、數值 =>預設升冪排列
2.針對資料進行減法運算(比較推薦使用,如下範例)
1 | let ary=[1,110,23,54] |
補充說明:升冪(以a為比較基準點)
1 | function compare(a, b) { |
補充說明:降冪(以b為比較基準點)
1 | function compare(a, b) { |
範例(搭配三元運算子):
1 | let ans = inventors.sort(function(a,b){ |
includes()
這個語法是ES7提供,會判斷陣列是否包含特定的元素,並以此來回傳true或false。
語法:arr.includes(searchElement[, fromIndex])
特性:
1.當fromIndex為負數,並且超過陣列長度則會搜尋整個陣列
2.當fromIndex為正數,並且超過陣列長度則會回傳false
3.當fromIndex為負數,但沒有超過陣列長度則會將array.length +fromIndex
開始向後搜尋
1 | var ary =[1,2,3] |
indexOf()
會回傳給定元素於陣列中第一個被找到之索引
,若不存在於陣列中則回傳 -1。 MDN介紹
語法:arr.indexOf(searchElement[, fromIndex])
特點:
1.fromIndex為正數,則會從左到右開始搜尋
2.fromIndex為負數,則會從陣列尾端開始搜尋,會搜尋到最後一個的索引值為 -1
1 | var array = [2, 9, 9]; |
slice()
會回傳一個新陣列物件,為原陣列選擇之 begin 至 end(不含 end)部分的淺拷貝(shallow copy)。而原本的陣列將不會被修改。 MDN
語法:arr.slice([begin[, end]])
特點:
Begin : 預設起始索引為0,若為負數則從最末端開始
End:預設起始索引為0,若為負數則從最末端開始
舉例來說,slice(1,4)提取了陣列中第二個元素至第四個元素前為止(元素索引 1、2 以及 3)來拷貝。
1 | var fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']; |
splice()
藉由刪除既有元素並/或加入新元素來改變一個陣列的內容。會回傳一個陣列
MDN
語法:array.splice(start[, deleteCount[, item1[, item2[, …]]]])
特點:
Start 增加/刪除項目的位置,負數代表從後方算起。
deleteCount 刪除的個數,如為0或沒有填寫則不會刪除。
Item… 添加的新項目。
1 | var myFish = ['angel', 'clown', 'mandarin', 'sturgeon']; |
join()
將所有的元素連接、合併成一個字串,並回傳此字串 MDN
語法:arr.join([separator])
特點:
Sperator若未傳入參數預設是用逗點隔開,
1 | var a = ['Wind', 'Rain', 'Fire']; |
reverse()
反轉陣列,會改變原本陣列內容! MDN
語法:a.reverse()
1 | var food=['apple','book','cat']; |