前面介紹過 forEach() 處理方法,今天我們要來介紹許多人覺得好用的 map() 方法。
為什麼現在更多人喜歡使用 map() 呢,主要是因為以下特點:
undefined
看到了嗎? map() 重新組合回傳一個新陣列、不會影響到原陣列
前述提到的 forEach() 在處理陣列時會修改到原本的陣列,且 forEach() 使用 return 並不會回傳任何東西;而 map() 則是在處理完後將新的值組成一個新的陣列並回傳。
const newArr = arr.map(function (item, index, array){
//...
})
跟 forEach() 很像,一樣使用回調函式 (callback) 與三個參數,後面兩個參數index 跟 array 可以自行選擇要不要加入。
不同的是 map() 最後會回傳一個所有元素皆為回調函式運算結果的新陣列,所以需要賦予到一個新的變數進去。
可以用來對資料做運算
const aArray = [2,4,6,8,10];
const newArr = aArray.map(function (item, index, array){
return item * item;
})
console.log(newArr); // (5)[4, 16, 36, 64, 100] 經過函式內的計算並將新值各自放到新的陣列
console.log(aArray); // (5)[2, 4, 6, 8, 10] 舊陣列不受影響
也可以對資料進行比較
const aArray = [2,4,6,8,10];
const newArr = aArray.map(function (item, index, array){
return item > 6;
})
console.log(newArr); // (5)[false, false, false, true, true]
console.log(aArray); // (5)[2, 4, 6, 8, 10]
如果沒有回傳 return 的話則會顯示 undefined
const aArray = [2,4,6,8,10];
const newArr = aArray.map(function (item, index, array){
// return item > 6;
})
console.log(newArr); // (5)[undefined, undefined, undefined, undefined, undefined]
filter() 是篩選、過濾的意思,特點如下:
filter() 使用一個回調函式 (callback) 傳入參數,將舊陣列的每個值依序進行條件比對,篩選出符合條件 ( 回傳值為 true ) 的值後,與 map() 一樣會回傳到新的陣列。
const aArray = [5, 15, 25, 55, 100, 215]
const newArr = aArray.filter(function (item, index, array){
return item > 50
})
console.log(newArr) // (3)[55, 100, 215] 篩選出符合大於 50 的值並放到新的陣列
console.log(aArray) // (6)[5, 15, 25, 55, 100, 215] 舊陣列不受影響
相較於 map() 比較過後是回傳布林值,filter() 則更進一步地將比較完後將布林值為 true 的值依序拉出來放到新的陣列,自動篩選出我們想要得到的資訊。
因為篩選的特性,filter() 常常可以用在例如比價網、選擇地區的下拉選單、判斷哪些地方的氣溫有超標等等的場景,跟 map() 是現在非常常被使用的方法之一。
const degreeData = [
{
area : "台北市",
degree : 33.8
},
{
area : "台中市",
degree : 35.5
},
{
area : "高雄市",
degree : 36.8
},
{
area : "花蓮",
degree : 35
},
]
const newData = degreeData.filter(function(item, index, array){
return item.degree >= 35;
})
console.log(newData);
// (3) [{…}, {…}, {…}]
// 0: {area: '台中市', degree: 35.5}
// 1: {area: '高雄市', degree: 36.8}
// 2: {area: '花蓮', degree: 35}
// length: 3
// [[Prototype]]: Array(0)
線上課程
MDN
卡斯伯:JavaScript 陣列處理方法 [filter(), find(), forEach(), map(), every(), some(), reduce()]