LoginSignup
1
0

More than 3 years have passed since last update.

[JS]連想配列に任意の値と等しい要素があるとき、findIndex関数だとインデックスが1つしか取得できない件

Last updated at Posted at 2019-07-04

今回したいこと

    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等を使って作る感じとのこと。
ということで、サンプルコードつくって関連記事に貼ってますので、参考にどうぞ。
ありがとうございました。

関連記事

mapメソッドで作ってみました。こちら
flatMapメソッドで作ってみました。こちら

1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0