查询大型JSON对象的条件

时间:2018-10-03 16:30:03

标签: javascript json

我正在尝试针对特定条件解析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
})

哪种方法效果很好,但是在我看来,这种查询是相当普遍的...是否存在用于执行此工作的内置函数?

1 个答案:

答案 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)));