今回したいこと
users:[
{name:'花子', age:'10', sex:'女'},
{name:'太郎', age:'11', sex:'男'},
{name:'次郎', age:'12', sex:'男'},
],
このデータから、sex='男'のuserのインデックスを取得したい。
つまり、1と2が変えればOK。
findIndexを使ったけど1つしか取れない
See the Pen findIndexサンプル by riotam (@riotam4) on CodePen.
ご覧の通り、男は次郎くんもいるのですが、帰ってくるインデックスは1…つまり、太郎君しか認識できません。
これは、よくない。
fileterを使ったけど、インデックスが取れない
See the Pen filterサンプル by riotam (@riotam4) on CodePen.
今度はfilterを使ってみました。
次郎君も認識できますが、インデックスを返してくれないので、微妙。
結論
- findIndexは要素1つしか取れない
- 2つ目以降の一致したインデックスは無視されるので注意
- 全て取りたいなら、forEach等で回して、一致するインデックスを1つずつ配列にpushしていくパターンが早そう
追記
Twitterで募集してみたが、やはり一発で全インデックスを取得できるメソッドはなさそうな。
みなさま、貴重なご意見ありがとうございました。
結局、map,flatMap,reduce等を使って作る感じとのこと。
ということで、サンプルコードつくって関連記事に貼ってますので、参考にどうぞ。
ありがとうございました。