ネストされたオブジェクトに文字列を比較します

lurf:

私は、コードに学習にかなり新しいです。これは愚かな質問であれば申し訳ありません。

私は文字の名前を検索し、それが誰であるかの文字私に戻りたいというネストされたオブジェクトデータベースを持っています。しかし、これまでのところ、私は、トップレベルのオブジェクトを検索したり、配列のためのものであると私はアイデアを実行しています解決策を見つけることができます。それはファラー 'のような名前のために徹底的に検索し、何とか「olisキャラクターの背中を取得することはできますか?

君たちが持つかもしれない何かアドバイスを事前に感謝!

{
  "olis characters": {
    "0": {
      "name": "Farah",
      "class": "rogue",
      "level": 74
    },
    "1": {
      "name": "Grop",
      "class": "paladin",
      "level": 31
    },
    "2": {
      "name": "Skolmr",
      "class": "druid",
      "level": 85,
    }
  },
  "chris characters": {
    "0": {
      "name": "Trygve",
      "class": "bard",
      "level": 28
    },
    "1": {
      "name": "Brusi",
      "class": "rogue",
      "level": 10
    },
    "2": {
      "name": "Steini",
      "class": "skald",
      "level": 58
    }
  }
}


マーク・マイヤー:

それがあるので、あなたのデータは少し奇妙です。あなたはそれが配列でなければなりません示唆している、持っていると数字キーを持つオブジェクト。あなたはまだを検索することができますことを言ってObject.values必要なデータを取得します。

let data = {"olis characters": {"0": {"name": "Farah","class": "rogue","level": 74},"1": {"name": "Grop","class": "paladin","level": 31},"2": {"name": "Skolmr","class": "druid","level": 85,}},"chris characters": {"0": {"name": "Trygve","class": "bard","level": 28},"1": {"name": "Brusi","class": "rogue","level": 10},"2": {"name": "Steini","class": "skald","level": 58}}}


function findChar(name, data) {
  for (let charGroup of Object.values(data)) {
    let found = Object.values(charGroup).find(char => char.name === name)
    if (found) return found
  }
}

console.log(findChar('Grop', data))
console.log(findChar('Brusi', data))

// will return undefined if the name is not there:
console.log(findChar('Mark', data))

あなたのような単純な配列にデータモデルを変更した場合:

let data = {
    "olis characters": [{
        "name": "Farah",
        "class": "rogue",
        "level": 74
      },
      {
        "name": "Grop",
        "class": "paladin",
        "level": 31
      }
    ],
    "chris characters": [{
        "name": "Trygve",
        "class": "bard",
        "level": 28
      },
      // ...
    ]
 }

...あなたはそれらのいずれかを避けることができObject.valuesて、直接検索を使用します。

function findChar(name, data){
   for (let charGroup of Object.values(data)){
      let found = charGroup.find(char => char.name === name)
      if (found) return found
   }
 }

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=34551&siteId=1