JavaScript 中篩選陣列的資料內容
map()
filter()
find()
some()
=> 不改變原陣列
reference: Best Methods to Check if the Elements of the Array Satisfy a Given Condition
map() return 新陣列
return 新陣列 不改變原陣列
因為 map 會建立新的陣列,如果在不想建立新陣列時使用該方法,就會變成反模式(anti-pattern):這種情況下,要使用 forEach 或 for-of (en-US)。
以下情況不應該使用 map:
- 不使用回傳的新陣列,
- 或/且不需要回傳新陣列。
const array1 = [1, 4, 9, 16];
// Pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1) // Expected output: Array [2, 8, 18, 32]
filter(參數為條件函式) return 新陣列
return 新陣列 不改變原陣列
JS內建的filter方法,只有通過這個條件函式檢查的項目,才會被filter保留並回傳一個 新的陣列。
let numbers = [1, 2, 3, 4, 5, 6]
let newNumbers = numbers.filter(number => number < 3)
console.log(newNumbers) // [1,2]
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length < 3);
console.log(result) // []
find(參數為條件函式) return 第一個符合條件的項目
find找到第一個符合條件的項目,函式馬上終止並回傳該項目,後面的項目都不再看。
return 第一個符合條件的項目 不改變原陣列
let numbers = [1, 2, 3, 4, 5, 6]
let newNumber = numbers.find((number) => number > 2) //3
let newNumber = numbers.find((number) => number > 6) //undefined
some(參數為條件函式) return Boolean
some方法和find類似,不過some只會回報「陣列裡有沒有item通過檢查條件」,有的話回傳true,到最後都沒有就回傳false。
return Boolean 不改變原陣列
let numbers = [1, 2, 3, 4, 5, 6]
let newNumber = numbers.some((number) => number === 3)
console.log(newNumber) //true
method | 回傳 |
---|---|
filter() | 多個符合條件的元素 |
find() | 第一個符合條件的元素 |
some() | 符合條件的元素=>true |