我一直在努力解决这个问题。对于_Underscore JS来说还是比较新的,我试图从嵌套对象数组中创建一个唯一值数组。以下示例数据:
[
{
"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
}
}
]
}
]
我试图获取的是一个包含所有UNIQUE嵌套“类型”值的数组。下面的数据示例:
["F","Q"]
我尝试_.pluck
和_.map
但收效甚微。我是否需要利用不同的东西,例如链接它们?感谢我能得到的任何帮助。
答案 0 :(得分:1)
这是一个使用链接的解决方案:
let result = _.chain(data)
.pluck('list')
.flatten()
.pluck('type')
.uniq()
.value();
首先plucking数据中的列表和flattening个列表。然后,在最终调用uniq以获取唯一类型之前,从列表中获取类型。
答案 1 :(得分: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;
}, []))
}, [])
答案 2 :(得分:0)
_.unique(_.flatten(_.map(myList, item => _.map(item.list, i => i.type))));
在编写函数时,Underscore并不是最好的,因为它首先需要数据。 lodash-fp
和ramda
在这方面要好得多。