1. ホーム
  2. javascript

[解決済み] JavaScriptでオブジェクトの配列から値を見つけるには?

2023-02-04 17:17:46

質問

オブジェクトの配列があります。

Object = {
   1 : { name : bob , dinner : pizza },
   2 : { name : john , dinner : sushi },
   3 : { name : larry, dinner : hummus }
}

私は、キーが "dinner" であるオブジェクト/配列を検索し、それが "sushi" に一致するかどうかを確認できるようにしたいです。

jQueryに$.inArrayがあることは知っていますが、オブジェクトの配列では動作しないようです。あるいは私が間違っているかもしれません。indexOfも1つの配列レベルでしか動作しないようです。

このための関数や既存のコードはないのでしょうか?

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

のような配列がある場合

var people = [
  { "name": "bob", "dinner": "pizza" },
  { "name": "john", "dinner": "sushi" },
  { "name": "larry", "dinner": "hummus" }
];

を使用することができます。 filter メソッドをArrayオブジェクトの

people.filter(function (person) { return person.dinner == "sushi" });
  // => [{ "name": "john", "dinner": "sushi" }]

新しいJavaScriptの実装では、関数式を使用することができます。

people.filter(p => p.dinner == "sushi")
  // => [{ "name": "john", "dinner": "sushi" }]


を持っている人を検索することができます。 "dinner": "sushi" を使って map

people.map(function (person) {
  if (person.dinner == "sushi") {
    return person
  } else {
    return null
  }
}); // => [null, { "name": "john", "dinner": "sushi" }, null]

または reduce

people.reduce(function (sushiPeople, person) {
  if (person.dinner == "sushi") {
    return sushiPeople.concat(person);
  } else {
    return sushiPeople
  }
}, []); // => [{ "name": "john", "dinner": "sushi" }]

これを任意のキーと値に一般化することができるのではないでしょうか!