[JavaScript] 配列からひとつの値を生成する – reduce()

  • このエントリーをはてなブックマークに追加
  • LINEで送る

reduce()は配列内の値を順番に処理していき、最終的に1つの値を生成することができます。

/**
 * 配列の値をすべて足す
 */
const list = [1, 2, 3, 4, 5]
const sum = list.reduce( (prev, current) => prev + current )

// 15
console.log(sum)

returnした値が、次に処理する際のprevに入っています。returnする値は文字列や数値以外には配列やハッシュでもかまいません。初見だとちょっと理解しにくいかもしれませんねw

- Sponsored Link -

利用例

最大値/最小値を取り出す

大きかった方の値をreturnし続けることで最終的に最大値を取り出すことができます。等符号を逆にすれば最小値が取り出せます。

const list = [1, 2, 3, 4, 5, 4, 3, 2, 1]
const max = list.reduce( (prev, current) => ((prev > current)?  prev:current) )
const min = list.reduce( (prev, current) => ((prev < current)?  prev:current) )

console.log(max)  // 5
console.log(min)  // 1

配列から重複した値を取り除く

returnする値は配列やオブジェクトでも構いません。またreduce()は第2引数に一番最初に処理する値を別途指定することができます。

この2つの特性を利用して配列にすでに存在する要素であればスキップする処理が書けます。

const list = [1, 2, 3, 4, 5, 4, 3, 2, 1]
const newlist = list.reduce( (prev, current) => {
  if( prev.indexOf(current) === -1){
    prev.push(current)
  }
  return(prev)
}, [ ])

// [1, 2, 3, 4, 5]
console.log(newlist)

まぁ…同じ結果を得たいだけなら連想配列を使った方が良さそうな気もしますがw

2次元配列を1次元に変換する

先ほどと同じ特性を利用することで、多次元配列を1次元配列に変換できます。

const list = [ [1, 2],
               [3, 4],
               [5, 6] ]
const newlist = list.reduce( (prev, current) => prev.concat(current), [ ])

// [1, 2, 3, 4, 5, 6]
console.log(newlist)

参考ページ

コメント

ご感想やご質問などお気軽にどうぞ。書き込むにはfacebookへのログインが必要です。

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで300円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -