json文件中的搜索循环

Search loop in json files

本文关键字:搜索 循环 文件 json      更新时间:2023-09-26

我有两个json文件:house和people。我想找到所有住在房子里的人。这是我的json文件:

房屋:

{
    "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
        }
    }
}

我想列出所有与他家有关的人。把House2的所有人都列出来。结果将是People2和People3。

我试着做了两个循环:

//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 }

您不需要嵌套循环,只需要一个用于人的键,另一个用于获取名称。

使用的方法:

  • 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);
});

如果我正确理解任务,这里的解决方案是:

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检查当前的人是否住在房子里,并将他们的名字记录在控制台中。