javascript - 如何使用 Lodash 对 JSON 数据进行子级过滤
问题描述
我有以下 JSON 数据集
[
{
"campaignId": 111,
"campaignCategory": "Diabetes",
"result": [
{
"campaignType": 1,
"name": "tes1"
},
{
"campaignType": 1,
"name": "test22"
},
{
"campaignType": 3,
"name": "test33"
}
]
},
{
"campaignId": 222,
"campaignCategory": "Orthopedic",
"result": [
{
"campaignType": 1,
"name": "Orthopedic"
}
]
},
{
"campaignId": 333,
"campaignCategory": "Cardiology",
"result": [
{
"campaignType": 3,
"name": "Cardiology"
},
{
"campaignType": 1,
"name": "Cardiology 123"
}
]
}
]
我已经厌倦了过滤器,但没有返回所需的数据。
_.filter(summary, function (data) {
return (post, _.filter(data.result, {'campaignType': 3}));
我想在应用过滤后获得以下数据。
[{ campaignId: 111, campaignCategory: 'Diabetes', result: [{
campaignType: 3, name: 'test33'
}] },
{ campaignId: 333, campaignCategory: 'Cardiology', result: [{
campaignType: 3, name: 'Cardiology'
}] } ];
这里所有的节点都显示了哪些有campaignType: 3
. Lodash 或纯基于 java 脚本的解决方案将起作用。
解决方案
您可以使用reduce
它来查找具有3.result
项的对象campaignType
,如果找到,则将它们推送到累加器数组:
const getOutput = () => {
const output = arr.reduce((a, item) => {
const foundResults = item.result.filter(({ campaignType }) => campaignType === 3);
if (foundResults.length) {
a.push({ ...item, result: foundResults });
}
return a;
}, []);
console.log(output);
};
const arr = [{
campaignId: 111,
campaignCategory: 'Diabetes',
result: [{
campaignType: 1,
name: 'tes1'
}, {
campaignType: 1,
name: 'test22'
}, {
campaignType: 3,
name: 'test33'
}]
},
{
campaignId: 222,
campaignCategory: 'Orthopedic',
result: [{
campaignType: 1,
name: 'Orthopedic'
}]
},
{
campaignId: 333,
campaignCategory: 'Cardiology',
result: [{
campaignType: 3,
name: 'Cardiology'
},
{
campaignType: 1,
name: 'Cardiology 123'
}
]
}
];
getOutput();
推荐阅读
- python - Windows 中带有 mod_wsgi 和 Apache 的 Python mod(-m) 选项
- google-kubernetes-engine - 具有跨集群百分比流量的多集群 Kubernetes
- java - 如何在 Eclipse/Spring 工具套件中调试 Serenity BDD 故事
- three.js - 如何使参数范围依赖于 Three.js 中的 dat.GUI
- python - 如何在不影响信任令牌的情况下使用硒?
- c# - 如何在 Asp.net C# 中从数据库中获取 Guid ID?
- angular - 使用波形工具时角度材料垫滑动切换空表单标签问题
- azure-data-factory - 从 Datafactory 在 VM 上调用“运行命令”的规范方法?
- javascript - 递归异步函数内存泄漏
- c# - 添加了SharpFont nuget,但未找到对Assembly 的引用