2017-07-16 58 views
1

我有像这样lodash找到嵌套数组属性不工作

sections: [ 
    { 
     editing: false, 
     id: 1234, 
     rows: [ 
      { 
       editing: false, 
       id: 3435, 
       columns: [ 
        { 
         id: 1535, 
         elements: [ 
          { 
           editing: true, 
           id: 4849 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
] 

和IM试图找到一个属性编辑任何对象是真正的数组。

下面的代码工作,但仅用于部分和行,但由于某些原因它不是找到元件阵列

这是JS在属性,使用lodash

return _(state.sections) 
     .thru(function(coll) { 
      return _.union(coll, _.map(coll, 'rows')); 
     }) 
     .thru(function(coll2) { 
      return _.union(coll2, _.map(coll2, 'columns')); 
     }) 
     .thru(function(coll3) { 
      return _.union(coll3, _.map(coll3, 'elements')); 
     }) 
     .flatten() 
     .find({ editing: true }); 

回答

0

第一后thru链的中间结果是由对象和数组的数组:

[ 
    { id: 1234, .... }, 
    [ { id: 3435, ... } ] 
] 

为了得到你想要的东西,更换map个电话与flatMap,然后这些第一thru后返回此:

[ 
    { id: 1234, .... }, 
    { id: 3435, ... } 
] 

一样会有undefined在中间结果返回如果对象没有columnselements,您将需要使用compact删除这些之前执行查找:

return _(state.sections) 
    .thru(function(coll) { 
     return _.union(coll, _.flatMap(coll, 'rows')); 
    }) 
    .thru(function(coll2) { 
     return _.union(coll2, _.flatMap(coll2, 'columns')); 
    }) 
    .thru(function(coll3) { 
     return _.union(coll3, _.flatMap(coll3, 'elements')); 
    }) 
    .compact() 
    .find({ editing: true }); 
+0

完美,非常感谢,我完全忘记了地图返回一个数组 – Dan