javascript - 如何过滤嵌套对象?
问题描述
我正在制作过滤器菜单。我有一个类似下面的对象。从我的过滤器菜单中,我将得到一个对象结果:
{gm: "FS H", rm: "RSM1", am: "BKK PULL", sales: "BKK SR1", state: "delhi", …}
从这个结果中,我需要找到相关的 sa_id 和 pr_id。从上面的结果: gm 是顶级菜单。rm 根据所选的 gm 进行过滤。
给定的是我的整个对象。现在我不知道如何过滤以获取我的 ID。
{
"FS H": {
"RSM1": {
"BKK PULL": {
"BKK SR1": {
mumbai: {
sa_id: 34,
pr_id: 12
},
delhi: {
sa_id: 12,
pr_id: 32
}
}
},
"BKK PUSH": {
"BKK BCDE1": [],
"BKK BAKE SE1": []
}
},
}
解决方案
您可以按正确顺序获取所需键的数组,并使用过滤器对象的值减少给定对象。
结果是具有所需 id 的对象,或undefined
.
function getID(filter) {
var keys = ['gm', 'rm', 'am', 'sales', 'state'];
return keys.reduce((o, k) => (o || {})[filter[k]], data);
}
var data = { "FS H": { "RSM1": { "BKK PULL": { "BKK SR1": { mumbai: { sa_id: 34, pr_id: 12 }, delhi: { sa_id: 12, pr_id: 32 } } }, "BKK PUSH": { "BKK BCDE1": [], "BKK BAKE SE1": [] } } } },
result = getID({ gm: "FS H", rm: "RSM1", am: "BKK PULL", sales: "BKK SR1", state: "delhi" });
console.log(result);
推荐阅读
- python - 如何在 ArcGIS 表的某些特定列中写入值?
- javascript - 在失去 redis 连接(微服务)时杀死 nestjs - node.js 进程
- swift - 无法关闭邮件视图控制器
- wpf - 将样式和控件从另一个程序集导入 WPF 应用程序的正确方法是什么?
- sql-server - 为什么我的 SSIS 包在 Visual Studio 中运行但在服务器上验证失败?
- torch - 如何通过忽略钩子来强制 torch.jit.trace 编译我的模块?
- node.js - 场景完成后如何停止 cucumberjs?
- laravel-5.8 - htmlspecialchars() 期望参数 1 是字符串,数组给定 laravel 5.8
- regex - 用于替换新行的正则表达式
- python-3.x - python return语句的主要问题