2017-06-21 31 views
1

我一直有一个时间赫克试图弄清楚这一点嵌套对象创建值数组。对于_Underscore JS还是比较新的,我试图从嵌套对象数组中创建一个唯一值的数组。使用_underscore

[ 
    { 
     "property":"prop1", 
     "list":[ 
     { 
      "description":"description blah", 
      "type":"F", 
      "values":{ 
       "value1":30.0, 
       "value2":0.0 
      } 
     }, 
     { 
      "description":"description blah", 
      "type":"F", 
      "values":{ 
       "value1":30.0, 
       "value2":0.0 
      } 
     } 
     ] 
    }, 
    { 
     "property":"prop2", 
     "list":[ 
     { 
      "description":"description blah", 
      "type":"Q", 
      "values":{ 
       "value1":30.0, 
       "value2":0.0 
      } 
     } 
     ] 
    } 
] 

什么我试图得到的回复是所有唯一嵌套的“类型”值的数组:下面的示例数据。跌破数据示例:

["F","Q"] 

我已经尝试_.pluck_.map收效甚微。我需要利用不同的东西,比如链接它们吗?感谢任何帮助,我可以得到这一点。

回答

1

这是一个使用链接的解决方案:

let result = _.chain(data) 
    .pluck('list') 
    .flatten() 
    .pluck('type') 
    .uniq() 
    .value(); 

该作品以第一plucking从数据列表和flattening他们。那么该类型是从列表中最后呼吁uniq获得独特类型的前plcuked。

+0

谢谢!这是完美的! – dlimes

0

你可以这样做定期JS和reduce(对不起,我不是很熟悉的底线,所以我想我会提供了一个解决方案香草现在)

var uniqueValues = data.reduce(function(vals, d) { 
    return vals.concat(d.list.reduce(function(listVals, l) { 
     if (vals.indexOf(l.type) === -1 && listVals.indexOf(l.type) === -1) { 
      listVals.push(l.type) 
     } 

     return listVals; 
    }, [])) 
}, []) 

演示:https://jsfiddle.net/0dsdm7Lu/

0
_.unique(_.flatten(_.map(myList, item => _.map(item.list, i => i.type)))); 

下划线是不是最大的,当谈到创作功能,因为它需要的数据第一。 lodash-fpramda在这方面要好得多。

工作小提琴:https://jsfiddle.net/8eLk7t15/

+0

不幸的是,这不是我的选择。如果这是我的选择,我会选择lodash(最终因为我听说它在许多方面往往是优越的)。所以我现在必须坚持下划线。我喜欢干净的外观虽然lodash,感谢反正:( – dlimes

+0

它实际上强调。 – adrice727

+0

我很抱歉,我还以为你暗示lodash,并提供lodash代码。在你的jsfiddle早该看清楚。虽然我还是喜欢链接方法使用的接受答案。谢谢! – dlimes