Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 757

javascriptの配列関連(for, map, filter, reduce)

$
0
0

自分で書くときはほとんどlodashを使ってしまい、JSnativeな配列関連メソッドを使わない。
サンプルコードやらを見る時に配列周りがわからん、となるのが苦しくなってきたので、復習と備忘を兼ねて整理。

とりあえず以下について記載

  • for in
  • for of
  • map
  • filter
  • reduce

for in

for inループは「オブジェクトのキー」に対して処理を繰り返し行う。

consthuman={name:'john',age:'24',hobby:'shoplifting'};for(letpropinhuman){console.log(prop+': '+human[prop]);};

結果

name: john
age: 24
hobby: shoplifting

humanオブジェクトから取り出したキーが変数propに格納され、humanオブジェクトの要素を取得したい場合はpropに格納されたキーを指定することで取得できる。

ちなみにfor in は配列に対しても実行できる。
配列に対して使用した場合は変数には添字が取得できるが、順番は保証されない。

constpeople=['taro','hanako','jiro']for(letpropinpeople){console.log(`key: ${prop}`);console.log(`value: ${people[prop]}`);};

結果

key: 0
value: taro
key: 1
value: hanako
key: 2
value: jiro

for of

for ofループはある集合の各要素に対して、繰り返し処理を実行できる。

constpeople=['taro','hanako','jiro'];for(letpropofpeople){console.log(`prop: ${prop}`);};

結果

prop: taro
prop: hanako
prop: jiro

for ofはイテラブルなオブジェクトに対して実行可能だが、通常のオブジェクトに対しては実行できない。

consthuman={name:'john',age:'24',hobby:'shoplifting'};for(letpropinhuman){console.log(prop+': '+human[prop]);};for(letpropofhuman){console.log(prop)}

結果

TypeError: human is not iterable

ちなみに文字列(string)もイテラブルなオブジェクトであるため、以下のようにfor ofを使って処理を行うことができる。

conststr="仕事やめたい";for(letpropofstr){console.log(prop);};

結果

仕
事
や
め
た
い

マジ切実

mapメソッド

mapメソッドは配列データに対してコールバック関数を実行することで、配列データを処理した内容を返す。

constwishList=[{name:'iphone',price:108000},{name:'energyDrink',price:200}];constaddTax=wishList.map(x=>x.price*1.1);console.log(addTax);

結果

[118000,220]

mapメソッドを使用した際には、要素の値そのもの(例では変数x)と添字も関数内で使用することができるので、
以下のように2つの配列を用いて、一つのオブジェクト要素の配列を作ることもできる。

constitemList=['iphone','energyDrink'];constpriceList=['108000','200'];constwishList=itemList.map((x,i)=>({name:x,price:priceList[i]}));

結果

{name:"iphone",price:"108000"}{name:"energyDrink",price:"200"}

filterメソッド

filterメソッドは配列に対して条件を指定し、条件に合致するものを抽出 (合致しないものを除外)し、結果を新しい配列で返す。まさにフィルター

constnumbers=[1,2,3,4,5,6,7,8,9,10];constevenNumbers=numbers.filter(x=>x%2==0);console.log(evenNumbers);

結果

[2,4,6,8,10]

mapとfilterを併用して使うことも可能。

constmultiple=x=>x*10;constnumbers=[1,2,3,4,5,6,7,8,9,10];constmultipledEvenNumbers=numbers.filter(x=>x%2==0).map(multiple);console.log(multipledEvenNumbers)

結果

[20,40,60,80,100]

予め定義した関数をmapに引き渡して、処理させることも可能。

reduceメソッド

reduceメソッドはmapが配列の各要素をそれぞれ変換していたのに対して、配列から一つの値に変換することのできるメソッド
reduceでは配列の要素と配列が最終的に変換された結果を関数に渡して処理を行うことができる。

constarr=[1,2,3,4,5];constsum=arr.reduce((accm,x)=>a+=x,0);console.log(sum);

結果

15

上の例では配列を処理した結果を変数accmに格納し、結果をsumにリターンしている。
recuceの第二引数に0を指定しているが、これはリターンされる結果の初期値で任意に指定できる。
例えば

constarr=[1,2,3,4,5];constsum=arr.reduce((accm,x)=>a+=x,100);console.log(sum);

結果

115

リターンされるaccmの初期値を100にして、処理の結果が返ってくる。
配列を一つのオブジェクトにまとめたり、文字列の結合をしたりするのに使われる。

所感

配列関数を久しぶりに見ると「この変数どこから来たんだ一体。。。」みたいになるので、
真面目に調べ直してみました。
javascriptの配列はかなり強力でいろんなことができるが、よく使い方を忘れるので忘備録でした。


Viewing all articles
Browse latest Browse all 757

Trending Articles