1. ホーム
  2. javascript

[解決済み] オブジェクトの配列で、検索に一致する属性を持つオブジェクトのインデックスを見つける最速の方法

2022-04-27 09:47:12

質問

効率的な方法を探しているのですが、なかなか見つかりません。次のようなオブジェクトの配列があります。

array[i].id = some number;
array[i].name = some name;

私がしたいことは、idが例えば0,1,2,3,4のうちの1つに等しいオブジェクトのINDEXを見つけることです。 私はちょうどのようなものを行うことができると思います。

var indexes = [];
for(i=0; i<array.length; i++) {
  (array[i].id === 0) ? { indexes[0] = i }
  (array[i].id === 1) ? { indexes[1] = i }
  (array[i].id === 2) ? { indexes[2] = i }
  (array[i].id === 3) ? { indexes[3] = i }
  (array[i].id === 4) ? { indexes[4] = i }
}

これは動作しますが、特にarray.lengthが大きくなる可能性がある場合、かなり高価で遅くなりそうです(言うまでもなく、醜いです)。これを少し洗練させる方法について何かアイデアはありますか?どうにかしてarray.indexOfを使うことを考えましたが、構文を強制する方法がわかりません。これは

array.indexOf(this.id === 0);

は、おそらくそうであるように、未定義を返します。

解決方法は?

Map"のような高次の関数を使いたい場合があります。 field "属性で検索したい場合。

var elementPos = array.map(function(x) {return x.id; }).indexOf(idYourAreLookingFor);
var objectFound = array[elementPos];