2017-06-21 61 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