2016-07-19 16 views
3

私は2つのjsonファイルを持っています:家と人。私は家に住むすべての人を見つけたいと思う。jsonファイルの検索ループ

家:

{ 
    "HOUSES": { 
     "1": { 
      "NAME": "House1", 
      "ID": 1 
     }, 
     "2": { 
      "NAME": "House2", 
      "ID": 2 
     }, 
     "3": { 
      "NAME": "House3", 
      "ID": 3 
     } 
    } 
} 

人々: はここに私のJSONファイルである

{ 
    "PEOPLE": { 
     "1": { 
      "NAME": "People1", 
      "HOUSE_ID": 1 
     }, 
     "2": { 
      "NAME": "People2", 
      "HOUSE_ID": 2 
     }, 
     "3": { 
      "NAME": "People3", 
      "HOUSE_ID": 2 
     } 
    } 
} 

、私は彼の家に関連するすべての人をリストアップしたいと思います。例:House2のすべての人をリストします。結果はPeople2とPeople3になります。

私はループのための2つを実行しようとしました:

//var houses and var peoples are the json files. 
for(var i in houses){ 
    console.log(houses[i]); 
    if(peoples.HOUSE_ID == houses[i].ID){ 
     for(var j in peoples){ 
      console.log(peoples[j].HOUSE_ID); 
     } 
    } 
} 

ループはIF文で入力する必要はありません。私は何をすべきか?

ありがとうございました。

編集:ここでは 両方console.log()の結果:

HOUSE_ID : { name: 'House1', 
    id: 1 } 
People id { NAME: 'People1', 
    HOUSE_ID: 1 } 
People id { NAME: 'People2', 
    HOUSE_ID: 2 } 
People id { NAME: 'People3', 
    HOUSE_ID: 2 } 
HOUSE_ID : { name: 'House2', 
    id: 2 } 
People id { NAME: 'People1', 
    HOUSE_ID: 1 } 
People id { NAME: 'People2', 
    HOUSE_ID: 2 } 
People id { NAME: 'People3', 
    HOUSE_ID: 2 } 
HOUSE_ID : { name: 'House3', 
    id: 3 } 
People id { NAME: 'People1', 
    HOUSE_ID: 1 } 
People id { NAME: 'People2', 
    HOUSE_ID: 2 } 
People id { NAME: 'People3', 
    HOUSE_ID: 2 } 
+1

正しくループしていません。 「住宅」の「私」は「住宅」であることに注意してください。そのためには、少し先にループする必要があります:https://jsfiddle.net/8zt69sjd/。注:あなたは自分の答えを見つけて問題を理解するのに役立つと願っています。私はフィドルにいくつかのコメントを追加しました。うまくいってみてください。問題を解決して質問を正しく提示しようとすると+1に値するはずです。また、ループを使用するのではなく、賢明なソリューションについては、下記のninaの答えを確認してください。 – briosheje

+0

'peoples.HOUSE_ID'が存在しないので – Andreas

+0

*" varの家とvarの人々はjsonファイルです "* - あなたはJSONを解析しましたか? 'console.log(houses [i]);'とは何ですか?あなたの質問を編集して、 'houses'変数と' peoples'変数がどのように設定されているかを明確にしてください。 – nnnnnn

答えて

3

あなたは何のネストされたループ、人々のキーと名前を取得するための1のためだけのものを必要としません。

使用方法:

  • Object.keysは、オブジェクトのすべての独自のプロパティ名

  • Array#filterフィルタ項目を取得し、すべての要素のための

  • Array#map返り、新たな価値だけで希望のものを返します

var data = { "HOUSES": { "1": { "NAME": "House1", "ID": 1 }, "2": { "NAME": "House2", "ID": 2 }, "3": { "NAME": "House3", "ID": 3 } }, "PEOPLE": { "1": { "NAME": "People1", "HOUSE_ID": 1 }, "2": { "NAME": "People2", "HOUSE_ID": 2 }, "3": { "NAME": "People3", "HOUSE_ID": 2 } } }, 
 
    result = Object.keys(data.PEOPLE).filter(function (k) { 
 
     return data.PEOPLE[k].HOUSE_ID === 2; 
 
    }).map(function (k) { 
 
     return data.PEOPLE[k].NAME; 
 
    }); 
 

 
console.log(result);

編集:

は、すべての人々と彼らの家を取得します。私は正しくここにタスクを理解している場合

var data = { "HOUSES": { "1": { "NAME": "House1", "ID": 1 }, "2": { "NAME": "House2", "ID": 2 }, "3": { "NAME": "House3", "ID": 3 } }, "PEOPLE": { "1": { "NAME": "People1", "HOUSE_ID": 1 }, "2": { "NAME": "People2", "HOUSE_ID": 2 }, "3": { "NAME": "People3", "HOUSE_ID": 2 } } }; 
 

 
Object.keys(data.PEOPLE).forEach(function (k) { 
 
    console.log(data.PEOPLE[k].NAME + ': ' + data.HOUSES[data.PEOPLE[k].HOUSE_ID].NAME); 
 
});

+0

華麗なもの。おそらく 'Keys'、' filter'と 'map'がこの特定の場合にどのように動作するか説明する価値があります。 – briosheje

+0

このソリューションをお寄せいただきありがとうございます。どのように動的に行うことができますか?つまり、 'PEOPLE.HOUSE_ID' ===' HOUSES.ID'のときにsometingします。これは正しいことですか? '参照データが正しい場合は、data.PEOPLE [k] .HOUSE_ID === data.HOUSES [k] .ID;' – PSport

+0

を返します。 –

1

は、ソリューションです:

var houses = { 
 
    "1": { 
 
    "NAME": "House1", 
 
    "ID": 1 
 
    }, 
 
    "2": { 
 
    "NAME": "House2", 
 
    "ID": 2 
 
    }, 
 
    "3": { 
 
    "NAME": "House3", 
 
    "ID": 3 
 
    } 
 
}; 
 
    
 
var peoples = { 
 
    "1": { 
 
    "NAME": "People1", 
 
    "HOUSE_ID": 1 
 
    }, 
 
    "2": { 
 
    "NAME": "People2", 
 
    "HOUSE_ID": 2 
 
    }, 
 
    "3": { 
 
    "NAME": "People3", 
 
    "HOUSE_ID": 2 
 
    } 
 
}; 
 

 
for (var i in houses){ 
 
    console.log('List of people in ' + houses[i].NAME + ':'); 
 
    for(var j in peoples){ 
 
     if (houses[i].ID === peoples[j].HOUSE_ID){ 
 
     console.log(peoples[j].NAME); 
 
     } 
 
    } 
 
}

条件彼らは家に住んでいる場合houses[i].ID === peoples[j].HOUSE_IDチェックが現在の人々で、彼らのログよりコンソールの名前。

+0

jsbinとしてではなく、ここにコードを投稿してください。スタックスニペットを使用して実行可能にすることができます。また、コードだけでなく説明も含めてください。将来のすべての読者に参考になります。 – Barmar

+0

修正されました。アドバイスありがとう –