我在过滤动态嵌套 json 数组中的数据时面临一个小问题。有人可以帮我解决我的问题吗..
var data = {
"root": {
"children": [{
"name": "Concept Phase",
"order": [{
"startTime": "20150101000000",
"endTime": "20150125000000"
}]
},
{
"name": "Design Phase",
"order": [{
"startTime": "2015012500000",
"endTime": "20150311000000"
}]
},
{
"name": "Validation Phase",
"order": [{
"startTime": "2015031100000",
"endTime": "20150430000000"
}]
},
{
"name": "Production Preparation",
"order": [{
"startTime": "2015043000000",
"endTime": "20150612000000"
}]
}
]
}
}
以上json对象可能会动态增加。现在我尝试通过传递多个对象(name,startTime,endTime
)来过滤 JSON。下面是我正在尝试的代码..
var filterBy = {
name: ["Concept Phase"],
startTime:["20150101000000"],
endTime: ["20150125000000"]
};
var result = data.root.children.filter(function (o) {
return Object.keys(filterBy).every(function (k) {
return filterBy[k].some(function (f) {
return o[k] === f;
});
});
});
如果我只传递name
,上面的代码将起作用。因为我只过滤 children
。如何过滤订单
中可用的属性?
对于上述 JSON,我需要传递 name,startTime, endTime
。预期输出应如下所示..
data = {
"root": {
"children": [{
"name": "Concept Phase",
"order": [{
"startTime": "20150101000000",
"endTime": "20150125000000"
}]
}
]
}
}
有人可以帮我解决这个问题吗?
提前谢谢您..
最佳答案
您可以在filterBy变量中设置精确的对象,如下所示
var filterBy = {
name: "Concept Phase",
order:[{
"startTime": "20150101000000",
"endTime": "20150125000000"
}]
};
然后使用下面的代码从子数组中过滤对象
var result = data.root.children.filter(function (o) {
return JSON.stringify(o) === JSON.stringify(filterBy)
});
您还可以使用下划线js函数_.isEqual来比较对象,如果原始对象中键值对的顺序不同,这很有用
关于javascript - json/js/jquery 如何过滤嵌套json数组中的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60651893/