我正在尝试针对特定条件解析a large JSON object
我当前的方法是设置一个递归过滤器:
function filter(obj,fn,items){
//Initialise items array
if(items==undefined)
items = []
//Filter for specific child objects
if(obj.children!=undefined){
obj.children.forEach(function(element){
if(fn(element)){
items.push(element)
}
filter(element,fn,items)
})
}
//Return items
return items
}
称呼为:
filter(data.items[0],function(el){
if(el.children != undefined)
return el.children.filter(function(el){
return el.toc_title == "Events"
}).length>0
})
哪种方法效果很好,但是在我看来,这种查询是相当普遍的...是否存在用于执行此工作的内置函数?
答案 0 :(得分:1)
尽管您可以递归地在方法 map 和 filter 之间使用组合,但是您的代码似乎可以正确工作。这样,您将获得更高效的代码。 Here中,您可以找到一些有关如何递归使用这些功能的示例。一个例子可能是:
let filteredFnc = (jsonObj) => jsonObj.filter(jsonObj => jsonObj.children !== undefined)
let map = (filteredFnc, obj) => !obj.length ? [] : [filteredFnc(obj[0])].concat(map(filtered, obj), obj.slice(1)));