条件に一致するオブジェクトのインデックスを取得するにはどうすればよいですか?
できません。何かが配列を反復処理する必要があります(少なくとも1回)。
条件が大きく変化する場合は、ループしてオブジェクトを調べ、条件に一致するかどうかを確認する必要があります。ただし、ES5機能を備えたシステムでは(またはシムをインストールした場合)、その反復はかなり簡潔に行うことができます。
var index;
yourArray.some(function(entry, i) {
if (entry.prop2 == "yutu") {
index = i;
return true;
}
});
これはnew(ish)Array#some
関数を使用します。これは、指定した関数がtrueを返すまで配列のエントリをループします。私が与えた関数は、一致するエントリのインデックスを保存してtrue
から、反復を停止するために戻ります。
または、もちろん、for
ループを使用します。さまざまな反復オプションについては、この別の回答で説明しています。
ただし、このルックアップで常に同じプロパティを使用する場合、およびプロパティ値が一意である場合は、1回だけループしてオブジェクトを作成し、それらをマッピングできます。
var prop2map = {};
yourArray.forEach(function(entry) {
prop2map[entry.prop2] = entry;
});
(または、繰り返しになりますが、for
ループまたはその他のオプションをます)。
次に、でエントリを検索する必要がある場合はprop2 = "yutu"
、これを行うことができます。
var entry = prop2map["yutu"];
これを「クロスインデックス」と呼びます。当然、エントリを削除または追加する(またはそのprop2
値を変更する)場合は、マッピングオブジェクトも更新する必要があります。
0
たら?)どちらのソリューションは、配列が(それのオッズはとても大きく、Aの人間であるが、ルックアップが起こっている場合を除き、低い気付くだろう大きければ少ない理想的である必要以上の繰り返し、やるたくさん)。