首页 > 解决方案 > Javascript 过滤掉一个类别

问题描述

我有一个对象数组。

const regions = [
{id:1,region_name:"Western province",region_parent_id:null},
{id:2,region_name:"Colombo",region_parent_id:1},
{id:3,region_name:"Gampaha",region_parent_id:1},
{id:4,region_name:"Kaluthara",region_parent_id:1},
{id:5,region_name:"Nugegoda",region_parent_id:2},
{id:6,region_name:"Maharagama",region_parent_id:2},
{id:7,region_name:"Central province",region_parent_id:null},
{id:8,region_name:"Kandy",region_parent_id:7},
{id:9,region_name:"Mathale",region_parent_id:7},
{id:10,region_name:"theldeniya",region_parent_id:8},
{id:11,region_name:"penideniya",region_parent_id:8}

]

console.log("PROVINCES",regions.filter(e=> !e.region_parent_id));

// get districts
let province_ids = []
regions.forEach(e=>{
  if(!e.region_parent_id){
    province_ids.push(e.id)
  }
})

console.log("PROVINCE IDS",province_ids)

regions.forEach(e=>{
  if(province_ids.includes(e.region_parent_id)){
    console.log(e.region_name,"IS A DISTRICT")
  }
})

这些对象可以分为 3 种类型。

  1. 城市

关系是市属于一个区,区属于一个省。

我可以像这样轻松获得省份,地区。

你能告诉我如何获得城市吗?

标签: javascript

解决方案


你可以Array.prototype.some()这样使用:

const regions = [
  {id:1,region_name:"Western province",region_parent_id:null},
  {id:2,region_name:"Colombo",region_parent_id:1},
  {id:3,region_name:"Gampaha",region_parent_id:1},
  {id:4,region_name:"Kaluthara",region_parent_id:1},
  {id:5,region_name:"Nugegoda",region_parent_id:2},
  {id:6,region_name:"Maharagama",region_parent_id:2},
  {id:7,region_name:"Central province",region_parent_id:null},
  {id:8,region_name:"Kandy",region_parent_id:7},
  {id:9,region_name:"Mathale",region_parent_id:7},
  {id:10,region_name:"theldeniya",region_parent_id:8},
  {id:11,region_name:"penideniya",region_parent_id:8}
];

const provinces = regions.filter(r => r.region_parent_id == null);
const districts = regions.filter(r => provinces.some(p => p.id === r.region_parent_id));
const cities = regions.filter(r => districts.some(d => d.id === r.region_parent_id));

console.log("Provinces: ", provinces);
console.log("Districts: ", districts);
console.log("Cities: ", cities);

可以肯定,这不是最有效的方法,但只要您的区域列表相对较短,就不会造成任何问题。


推荐阅读