Lodash - 搜索嵌套数组和返回对象

lee*_*100 3 javascript lodash

我正在使用Lodash搜索嵌套数组,并希望在找到匹配项时返回该对象.

对于每个对象,搜索总线4.如果找到,则返回对象(在本例中为school'xyz').

var schools = [  
   {  
      "id":1,
      "school":"abc",
      "bus":[  
         {  
            "id":1,
            "name":"first bus"
         },
         {  
            "id":2,
            "name":"second bus"
         }
      ]
   },
   {  
      "id": 2,
      "school":"xyz",
      "bus":[  
         {  
            "id":3,
            "name":"third bus"
         },
         {  
            "id":4,
            "name":"fourth bus"
         }
      ]
   }
]
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的:

_.forEach(schools, function(school){console.log(_.where(school.bus, {'id':4}))})
Run Code Online (Sandbox Code Playgroud)

只是吐出结果.有点作品.

Rob*_*rey 13

首先,我们应该决定使用什么功能.过滤https://lodash.com/docs#filter符合我们的要求,因为我们想要返回通过评估的内容.

困难的部分是制定评估.lodash确实支持通过嵌套数组进行搜索,一旦你学会了它,语法实际上非常直观.

_.filter(schools,
  {
    bus: [{id: 4}]
  }
);
Run Code Online (Sandbox Code Playgroud)

相反,如果总线不是一个数组,在这种情况下它将是

_.filter(schools,
  {
    bus: {id: 4}
  }
);
Run Code Online (Sandbox Code Playgroud)

警告:过滤器将始终返回一个数组,因此如果您只想要对象,请确保将[0]附加到它.

  • 太棒了,谢谢罗伯特.还要感谢你把自鸣得意的人留在门口:) (5认同)
  • 你好,我用过这个功能。它返回我 [ { id: 123, child: [ {id: 34}, {id: 35}, {id: 36} ] } ] 当我搜索 _.filter(insuranceMasterData, { child: { id: 35 } }); 但我只是在子数组中的特定对象具有 maching id 而不是整个数组。除了自定义循环之外的任何建议。 (2认同)