javascript – 使用lodash查找深层嵌套的JSON属性

我有一个具有以下结构的
JSON API响应

[
  {
    title: "top1",
    sections: [
      {
        section_title: "section1",
        content: [
          {
            content_title: "title1",
            content_id: "id1"
          },
          {
            content_title: "title2",
            content_id: "id2"
          }
        ]
      },
      {
        section_title: "section2",
        content: [
          {
            content_title: "title3",
            content_id: "id3"
          },
          {
            content_title: "title4",
            content_id: "id4"
          }
        ]
      }
    ]
  }, {
    title: "top2",
    sections: [...]
  },
  ...
]

我还有一小部分内容ID arr2 = [‘id2′,’id3’].我需要从API请求中搜索数据,以查找arr2中包含的任何content_id.

我有一些工作的lodash代码,但我的嵌套forEach方法似乎不是最有效的方法:

_.forEach(response, function(top) {
  _.forEach(top.sections, function(section) {
    _.forEach(section.content, function(content) {
      _.forEach(arr2, function(id) {
        if(id === content.content_id) {
         // Do stuff
        }
      })
    })
  })
})

我怎么能改进这段代码?

最佳答案 经过一番思考,我实际上无法为您提供更优雅的解决方案,使用其他lodash功能.似乎要为每个案例设置拥有的属性,forEach就是要走的路.我可以做的唯一优化就是避免使用lodash简单地使用vanilla javascript forEach Array函数,并使用find替换最里面的forEach(可能会略微提升性能).

response.forEach((topItem) => {
    topItem.sections.forEach((section) => {
        section.content.forEach((content) => {
            if(arr2.find((item) => { return item === content.content_id; })){
                topItem.owned = true; section.owned = true; content.owned = true;
            }
        });
    });
});

我对箭头函数语法也有个人偏好…

点赞