配列メソッド使いこなせている?
配列を処理するときに毎回for (let i=0; i<n; i++)
ってループ使っていませんか?
Javascriptの一般的な配列メソッドにはpop
やpush
、shift
、unshift
、slice
、splice
などの配列自体の操作系もありますが、上記のように配列内の全ての要素に処理を行うことができるメソッドがあります。(モダンJavascript)
配列の処理は頻繁に出てくるかと思うので、息をするように使えるようになりたいです。
ES2015(ES6)の一括処理系の配列メソッドの使いどころ
全てに何かしらの同一の処理する系
map
、forEach
全てに同一の条件一致を処理する系
filter
、find
、some
、every
左から順番に処理する系(おまけ)
reduce
メソッド | 処理 | 返り値 |
---|---|---|
map |
全てに同じ処理 | 処理結果を配列に |
forEach |
全てに同じ処理 | なし(順番に処理を行う) |
filter |
条件に一致するかを確認 | 一致するもののみを配列に |
find |
条件に一致するかを確認 | 一致するものの最初のみ |
some |
条件に一致するかを確認 | 1つでも一致していればtrue
|
every |
条件に一致するかを確認 | 全て一致していればtrue
|
reduce |
左から順番に処理 | 最終結果 |
使いどころチャート
こんなところでしょうか?(reduce
を除く)
ES2015(ES6)の一括処理系の配列メソッドの使い方
map
処理:全てに同じ処理 / 返り値:処理結果を配列に
const nums = [1, 5, 10, 30]
double = nums.map((num) => {
return num * 2
})
console.log(double)
// [2, 10, 20, 60]
forEach
処理:全てに同じ処理 / 返り値:なし(順番に処理を行う)
const nums = [1, 5, 10, 30]
nums.forEach((num) => {
console.log(num)
})
// 1
// 5
// 10
// 30
filter
処理:条件に一致するかを確認 / 返り値:一致するもののみを配列に
const nums = [1, 5, 10, 30]
const big = nums.filter((num) => {
return num >= 10
})
console.log(big)
// [ 10, 30 ]
find
処理:条件に一致するかを確認 / 返り値:一致するものの最初のみ
const nums = [1, 5, 10, 30]
const big = nums.find((num) => {
return num >= 10
})
console.log(big)
// 10
some
処理:条件に一致するかを確認 / 返り値:1つでも一致していればtrue
const nums = [1, 5, 10, 30]
const isSomeOver15 = nums.some((num) => {
return num >= 15
})
console.log(isSomeOver15)
// true
every
処理:条件に一致するかを確認 / 返り値:全て一致していればtrue
const nums = [1, 5, 10, 30]
const isEveryOver15 = nums.every((num) => {
return num >= 15
})
console.log(isEveryOver15)
// false
reduce
処理:左から順番に処理 / 返り値:最終結果
const nums = [1, 5, 10, 30]
const result = nums.reduce((pre, cur) => {
pre + cur * 2, 0 // ,の後の0は初期値
})
console.log(result)
// 92
// 2 + 10 + 20 + 60 の結果
// 「pre + cur * 2」はコールバック関数
補足
意外と配列メソッド少ないので全部覚えることできそうですね!