1. ホーム
  2. javascript

[解決済み] javascriptの配列で、キーと値からオブジェクトのインデックスを見つける方法

2023-02-18 01:29:14

質問

与えられた。

var peoples = [
  { "attr1": "bob", "attr2": "pizza" },
  { "attr1": "john", "attr2": "sushi" },
  { "attr1": "larry", "attr2": "hummus" }
];

募集中です。

オブジェクトのインデックス attr === value 例えば attr1 === "john" または attr2 === "hummus"

更新しました。 私は$.inArrayを介してオブジェクトを見つけたいわけではなく、特定のオブジェクトの属性の値を取得したいのですが、私の質問をよく読んでください。あなたの答えのためにこれを考慮してください。ありがとうございます。

どのように解決するのですか?

機能的なアプローチ

イケてる子たちはみんな関数型プログラミングをやっている ( こんにちは、Reactユーザー )なので、私は関数型ソリューションを提供しようと思いました。私の見解では、これは不自由な foreach というループがあり、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);