javascript - 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 种类型。
- 省
- 区
- 城市
关系是市属于一个区,区属于一个省。
我可以像这样轻松获得省份,地区。
你能告诉我如何获得城市吗?
解决方案
你可以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);
可以肯定,这不是最有效的方法,但只要您的区域列表相对较短,就不会造成任何问题。
推荐阅读
- java - xpath 测试并正确,但我收到错误:没有这样的元素:无法找到元素
- spring-boot - MapStruct 使用 Spring Boot 接口导致 NoSuchBeanDefinitionException
- react-native - 关闭嵌套堆栈导航器
- r - 有没有办法对 ggplot 输出进行非字母化处理?
- django - Slack API 如何获取安装应用程序的不同工作区的对话列表?
- c# - 我无法修复错误 CS1001:需要标识符
- javascript - 将文件输入设置为 HTML 元素的背景
- kubernetes-helm - Helm 从另一个 YAML 文件添加秘密
- git - 有没有办法将源分支合并到目标分支中,同时在目标分支的 HEAD 处保留提交?
- pandas - Pyspark Value错误:部分类型推断后无法确定