1. ホーム
  2. javascript

[解決済み] ネストされたJavaScriptオブジェクトの反復処理 [重複] [重複

2023-05-05 09:59:46

質問

ネストされたオブジェクトを繰り返し処理し、文字列で識別される特定のオブジェクトを取得しようとしています。以下のサンプルオブジェクトでは、識別子の文字列は "label"プロパティです。適切なオブジェクトを返すために、ツリーを繰り返し処理する方法がわかりません。何かお手伝いやご提案がありましたら、ぜひお願いします。

var cars = {
  label: 'Autos',
  subs: [
    {
      label: 'SUVs',
      subs: []
    },
    {
      label: 'Trucks',
      subs: [
        {
          label: '2 Wheel Drive',
          subs: []
        },
        {
          label: '4 Wheel Drive',
          subs: [
            {
              label: 'Ford',
              subs: []
            },
            {
              label: 'Chevrolet',
              subs: []
            }
          ]
        }
      ]
    },
    {
      label: 'Sedan',
      subs: []
    }
  ]
}

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

このような再帰的な関数を作成して、深さ優先のトラバースを行うことで cars オブジェクトの深さ方向の探索を行うことができます。

var findObjectByLabel = function(obj, label) {
    if(obj.label === label) { return obj; }
    for(var i in obj) {
        if(obj.hasOwnProperty(i)){
            var foundLabel = findObjectByLabel(obj[i], label);
            if(foundLabel) { return foundLabel; }
        }
    }
    return null;
};

のように呼び出すことができます。

findObjectByLabel(car, "Chevrolet");