[解決済み] javascriptの配列で、キーと値からオブジェクトのインデックスを見つける方法
質問
与えられた。
var peoples = [
{ "attr1": "bob", "attr2": "pizza" },
{ "attr1": "john", "attr2": "sushi" },
{ "attr1": "larry", "attr2": "hummus" }
];
募集中です。
オブジェクトのインデックス
attr === value
例えば
attr1 === "john"
または
attr2 === "hummus"
更新しました。 私は$.inArrayを介してオブジェクトを見つけたいわけではなく、特定のオブジェクトの属性の値を取得したいのですが、私の質問をよく読んでください。あなたの答えのためにこれを考慮してください。ありがとうございます。
どのように解決するのですか?
機能的なアプローチ
イケてる子たちはみんな関数型プログラミングをやっている (
こんにちは、Reactユーザー
)なので、私は関数型ソリューションを提供しようと思いました。私の見解では、これは不自由な
for
と
each
というループがあり、ES6構文では非常にエレガントです。
更新情報
という素晴らしい方法が登場しました。
findIndex
と呼ばれるもので、これは
true
/
false
のように、配列の要素が一致するかどうかで判断します(いつものように、ブラウザの互換性をチェックしてください)。
var index = peoples.findIndex(function(person) {
return person.attr1 == "john"
});
ES6構文ではこう書けるようになる。
var index = peoples.findIndex(p => p.attr1 == "john");
(古い) 機能的アプローチ
TL;DR
もし、あなたが
index
ここで
peoples[index].attr1 == "john"
を使用します。
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
説明
ステップ1
使用方法
.map()
を使って、特定のキーに対応する値の配列を取得します。
var values = object_array.map(function(o) { return o.your_key; });
上の行はここから先です。
var peoples = [
{ "attr1": "bob", "attr2": "pizza" },
{ "attr1": "john", "attr2": "sushi" },
{ "attr1": "larry", "attr2": "hummus" }
];
ここまで
var values = [ "bob", "john", "larry" ];
ステップ2
ここで
.indexOf()
を使って欲しいキーのインデックスを見つけるだけです (もちろん、これは探しているオブジェクトのインデックスでもあります)。
var index = values.indexOf(your_value);
解決方法
上記を全て組み合わせます。
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
あるいは、ES6構文がお好みであれば
var index = peoples.map((o) => o.attr1).indexOf("john");
デモです。
var peoples = [
{ "attr1": "bob", "attr2": "pizza" },
{ "attr1": "john", "attr2": "sushi" },
{ "attr1": "larry", "attr2": "hummus" }
];
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
console.log("index of 'john': " + index);
var index = peoples.map((o) => o.attr1).indexOf("larry");
console.log("index of 'larry': " + index);
var index = peoples.map(function(o) { return o.attr1; }).indexOf("fred");
console.log("index of 'fred': " + index);
var index = peoples.map((o) => o.attr2).indexOf("pizza");
console.log("index of 'pizza' in 'attr2': " + index);
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み] JavaScript でオブジェクトが特定のプロパティを持つかどうかを確認するにはどうすればよいですか?
-
[解決済み] 文字列のn番目の出現箇所を取得するには?
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] ECMAScriptとは?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
-
[解決済み] これは純関数ですか?