私はこのような配列を持っています:
[{prop1:"abc",prop2:"qwe"},{prop1:"bnmb",prop2:"yutu"},{prop1:"zxvz",prop2:"qwrq"},...]
配列全体を反復処理せずに、条件に一致するオブジェクトのインデックスを取得するにはどうすればよいですか?
たとえば、与えられたprop2=="yutu"
、私はインデックスを取得したいと思います1
。
私は見ました.indexOf()
が、のような単純な配列に使用されていると思います["a1","a2",...]
。私もチェックしました$.grep()
が、これはインデックスではなくオブジェクトを返します。
2016年現在、これにはArray.findIndex
(ES2015 / ES6標準)を使用することになっています。
a = [
{prop1:"abc",prop2:"qwe"},
{prop1:"bnmb",prop2:"yutu"},
{prop1:"zxvz",prop2:"qwrq"}];
index = a.findIndex(x => x.prop2 ==="yutu");
console.log(index);
Google Chrome、Firefox、Edgeでサポートされています。Internet Explorerの場合、リンクされたページにポリフィルがあります。
パフォーマンスノート
関数呼び出しは負荷が高いため、非常に大きな配列を使用すると、単純なループのパフォーマンスが次のように向上しますfindIndex
。
let test = [];
for (let i = 0; i < 1e6; i++)
test.push({prop: i});
let search = test.length - 1;
let count = 100;
console.time('findIndex/predefined function');
let fn = obj => obj.prop === search;
for (let i = 0; i < count; i++)
test.findIndex(fn);
console.timeEnd('findIndex/predefined function');
console.time('findIndex/dynamic function');
for (let i = 0; i < count; i++)
test.findIndex(obj => obj.prop === search);
console.timeEnd('findIndex/dynamic function');
console.time('loop');
for (let i = 0; i < count; i++) {
for (let index = 0; index < test.length; index++) {
if (test[index].prop === search) {
break;
}
}
}
console.timeEnd('loop');
ほとんどの最適化と同様に、これは慎重に、実際に必要な場合にのみ適用する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加