Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有递归关系的JavaScript过滤器_Javascript - Fatal编程技术网

具有递归关系的JavaScript过滤器

具有递归关系的JavaScript过滤器,javascript,Javascript,我的用例是这样的 我有一个称为位置的对象数组 它包含有关省、区和市的信息 城市属于一个区,区属于一个省 如果parent\u region\u idnull表示它是一个省 如果parent\u region\u id是一个省的id,则表示它是一个区 否则它就是一座城市 我的目标是从数组中筛选出所有城市。 我做了一个奇怪的方式,但它的工作 但我想知道做这件事的最佳方式是什么? 这是我的工作代码 const位置=[ {id:1,名称:“西部省”,父区\ id:null}, {id:2,名称:“

我的用例是这样的

  • 我有一个称为位置的对象数组
  • 它包含有关省、区和市的信息
  • 城市属于一个区,区属于一个省
  • 如果
    parent\u region\u id
    null
    表示它是一个省
  • 如果
    parent\u region\u id
    是一个省的id,则表示它是一个区
  • 否则它就是一座城市
我的目标是从数组中筛选出所有城市。 我做了一个奇怪的方式,但它的工作

但我想知道做这件事的最佳方式是什么? 这是我的工作代码

const位置=[
{id:1,名称:“西部省”,父区\ id:null},
{id:2,名称:“南部省”,父区\ id:null},
{id:3,名称:“中央省”,父区\ id:null},
{id:4,名称:“科伦坡区”,父区\ id:1},
{id:5,名称:“加勒区”,父区\ id:2},
{id:6,名称:“坎迪区”,父区\ id:3},
{id:7,姓名:“Maharagama”,父区\ id:4},
{id:8,名称:“Nugegoda”,父区\ id:4},
{id:9,姓名:“Peradeniya”,父区id:6},
]
//先拿到省的证件
常数省份=[]
位置。forEach(e=>{
如果(!e.parent\u region\u id){
省份推送(e.id)
}
})
//那就去所有的地区吧
const districts=[]
位置。forEach(e=>{
if(包括省份(例如父区id)){
地区推送(e.id)
}
})
//获得城市
康斯特城市=[];
位置。forEach(e=>
{
如果(!地区包括(e.id)和&!省份包括(e.id)){
console.log(例如name,“is a city”)
}
})
使用和保存

const locations=[{id:1,名称:“西部省”,父区id:null},{id:2,名称:“南部省”,父区id:null},{id:3,名称:“中部省”,父区id:null},{id:4,名称:“科伦坡区”,父区id:1},{id:5,名称:“加勒区”,父区id:2},{id:6,名称:“坎迪区”,父区id:3},名称:“Maharagama”,父区id:4},{id:8,名称:“Nugegoda”,父区id:4},{id:9,名称:“Peradeniya”,父区id:6},]
const res=locations.filter({id,parent\u region\u id},i,a)=>{
如果(!parent_region_id)返回false;
const loc=a.find(l=>l.id==parent\u region\u id);
return!loc.parent\u region\u id?false:true;
});

console.log(res);
如果要使代码更干净、更紧凑,请尝试使用
filter()
如下所示:


常数位置=[
{id:1,名称:“西部省”,父区\ id:null},
{id:2,名称:“南部省”,父区\ id:null},
{id:3,名称:“中央省”,父区\ id:null},
{id:4,名称:“科伦坡区”,父区\ id:1},
{id:5,名称:“加勒区”,父区\ id:2},
{id:6,名称:“坎迪区”,父区\ id:3},
{id:7,姓名:“Maharagama”,父区\ id:4},
{id:8,名称:“Nugegoda”,父区\ id:4},
{id:9,姓名:“Peradeniya”,父区id:6},
];
const provides=locations.filter(e=>!e.parent\u region\u id);
const districts=locations.filter(e=>provides.some(p=>p.id==e.parent\u region\u id));
const cities=locations.filter(e=>!provides.includes(e)和&!districts.includes(e));
console.log(省);
控制台.日志(地区);
console.log(城市);