オブジェクトの配列で、検索に一致する属性を持つオブジェクトのインデックスを見つける最も速い方法は、質問する

オブジェクトの配列で、検索に一致する属性を持つオブジェクトのインデックスを見つける最も速い方法は、質問する

私はこれを効率的に行う方法を見つけようといろいろ調べましたが、どこにも行き着きませんでした。次のようなオブジェクトの配列があります。

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

私がやりたいのは、たとえば id が 0、1、2、3、または 4 のいずれかに等しいオブジェクトのインデックスを見つけることです。次のようなことができると思います。

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);

たとえば、おそらくそうであるように、undefined を返します。

ベストアンサー1

「map」などの高階関数を使用したい場合もあるでしょう。「field」属性で検索したいと仮定します。

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

おすすめ記事