はじめに
Node.jsを使ったWebアプリの開発にて、forEachでリストを回していたのですが、
急遽インデックスの情報も必要になりました。
そこで次のようなソースコードを書いたものの、「もっといい方法がある」と仲間に指摘されました。
実際に試したところ非常に便利だったことと、Pythonのenumerate関数に近いものを感じたので、
for文でインデックスとバリューを同時に取得する方法として、記事に残します。
ary=["bar","foo","hoge"]leti=0ary.forEach(function(value){console.log(i,value);i++});// 0 bar// 1 foo// 2 hoge
実行環境
- Node.js v12.16.3
検証環境
- Paiza.io(Python 3.8.2)
- Paiza.io(Node.js v12.18.3)
そもそもenumerate関数とは
引数に指定したリストの、インデックスとバリューを取得する関数です。
ary=["bar","foo","hoge"]fori,iteminenumerate(ary):print(i,item)# 0 bar
# 1 foo
# 2 hoge
for文でインデックスとバリューを同時に取得する
forEachは、第二引数にインデックスを指定できる
forEach関数において 第一引数はリスト、第二引数はインデックスを取ります。
このインデックスは、ループ回数が増加するごとに自動的にインクリメントされるため、i++
やi += 1
と記述する必要はありません。
ary=["bar","foo","hoge"]ary.forEach(function(value,i){console.log(i,value);});// 0 bar// 1 foo// 2 hoge
for in
を使う
for in
はリストのインデックスを取得します。
次のようなソースコードにより、インデックスとバリューを取り出します。
ary=["bar","foo","hoge"]for(iinary){console.log(i,ary[i])}// 0 bar// 1 foo// 2 hoge
一方で、for in
では次のように予期しない挙動を示す場合もあるので、
利用には注意が必要そうです。
vardata=['apple','orange','banana'];//配列オブジェクトにhogeメソッドを追加Array.prototype.hoge=function(){}for(varkeyindata){console.log(data[key]);}// apple// orange// banana// function(){}