我在atts
数组中有一个嵌套的“items
”对象。
baseData = [
{
id: 123123
name: "Some Product"
atts: {
lowfreqrange: 100,
package: 'connector',
amplifier: 'narrowband'
}
},
{
id: 5556652
name: "Some Second Product"
atts: {
lowfreqrange: 50,
package: 'drop-in',
amplifier: 'LNA'
}
},
{
id: 5465456
name: "Some 2 Product"
atts: {
lowfreqrange: 100,
package: 'connector',
amplifier: 'narrowband'
}
}
]
我希望输出为:
[
lowfreqrange: [100, 50]
amplifier: ['LNA', 'narrowband']
package: ['connector', 'drop-in']
]
除了手动循环之外,还有一种快速方法可以使用lodash处理此问题吗?我有这个,但是想看看我怎么能用lodash来做,主要是出于教育目的:
for item in baseData
atts = item.atts
for k, v of atts
result[k] = [] unless result[k]
result[k].push v
答案 0 :(得分:0)
您可以使用地图并减少这样的功能。
result = _(baseData).map((item) ->
item.atts
).reduce((result, item) ->
result.lowfreqrange.push item.lowfreqrange
result.package.push item.package
result.amplifier.push item.amplifier
result
,
lowfreqrange: []
package: []
amplifier: []
).valueOf()
在这里查看它(在vanilla JS中):http://jsbin.com/siniku/2/edit
答案 1 :(得分:0)
我对coffeescript并不是很了解,所以我会用简单的javascript编写我的解决方案。您可以通过提取每个atts
键值来解决此问题。
<强> Demo 强>
var result = _.reduce(['lowfreqrange', 'package', 'amplifier'],
function(object, key) {
object[key] = _(baseData).pluck(['atts', key]).uniq().value();
return object;
}, {});
或者,如果您不确定atts
个键的数量,或者您只是不想对它们进行硬编码,那么您可以先将它们全部取出然后应用上面的解决方案
<强> Demo 强>
var result = _(baseData).pluck('atts').map(_.keys).flatten().uniq()
.reduce(function(object, key) {
object[key] = _(baseData).pluck(['atts', key]).uniq().value();
return object;
}, {});