Javascript 复杂的查找()查询

Javascript 复杂的查找()查询,javascript,lodash,Javascript,Lodash,考虑这个例子: var data = { crates: { 'crateID': { fruit: { 'fruitID': { attributes: { type: 'apple'} } }, /*...*/ } }, /*...*/ } 我希望使用\uuu.find(

考虑这个例子:

var data = { 
  crates:
   { 'crateID':
      { 
        fruit:
         { 'fruitID':
            { 
              attributes:
               { type: 'apple'}
            }
         },
         /*...*/
     }
  },
  /*...*/
}
我希望使用
\uuu.find()
(或一组lodash函数)返回一个内部fruit对象

目前,我尝试了
var-fruit=u.find(data.crates,{fruit:{attributes:{type:'apple'}}})
,但它返回
未定义
,这可能是因为我忽略了键
板条箱ID
水果ID

我也试过了

_.each(data.crates, function (crate) {
     var fruit = _.find(crate.fruit, attributes: { type: 'apple'}}});
});
它会在当时找到(或不找到)每箱水果。这里的问题是,它感觉很粗糙,而且还因为它不是同步的,这使得它不适合我的需要

是否有一种方法可以使用Lodash以同步方式查找并返回水果对象(此代码位于必须返回对象的函数中)

我希望返回一个内部水果对象

这意味着您需要在收集的水果上应用
查找,而不是在板条箱上。你可以这样做

// join fruits from all crates
var fruits = _.merge.apply(_, _.pluck(data.crates, "fruit"));
// or maybe:
var fruits = _.flatten(_.values(_.pluck(data.crates, "fruit")));
var fruit = _.find(fruits, {attributes: { type: 'apple'}})

所有lodash功能(除了明显的
去盎司
延迟
延迟
节流
)都是同步的,
返回结果?并不是所有接受回调的操作都是自动异步的。这非常有效,谢谢!)我知道在调用u.find()之前需要一些步骤,但不确定是哪一步。