[解決済み] 条件に合致する、配列内のオブジェクトのインデックスを取得します。
2022-03-22 23:33:40
質問
このような配列があります。
[{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');
ほとんどの最適化と同様に、これは慎重に、実際に必要なときだけ適用する必要があります。
関連
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] セレクタの子を取得する方法は?
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み] 配列の最後の項目を取得する
-
[解決済み] オブジェクト配列のindexOfメソッド?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
fetch ネットワークリクエストラッパーの説明例
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み] 期待される代入または関数呼び出し: 未使用式なし ReactJS
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
[解決済み】「.addEventListener is not a function」なぜこのエラーが発生するのか?