Fun*_*ion 4 javascript arrays json object underscore.js
我正在尝试按日期对数组中的对象进行分组:
var list = [
{
date: "2017-01-01",
type: "type1",
amount: 100
},
{
date: "2017-01-01",
type: "type2",
amount: 150
},
{
date: "2017-01-02",
type: "type1",
amount: 200
}
]
Run Code Online (Sandbox Code Playgroud)
而我正试图得到类似的东西:
var dateArr = [
{
date: "2017-01-01",
activities: [
{
type: "type1",
amount: 100
},
{
type: "type2",
amount: 150
}]
}
]
Run Code Online (Sandbox Code Playgroud)
我尝试了一些事情......比如使用下划线(来自这里/sf/answers/1112223871/):
var dateArr = _
.chain(list)
.groupBy('date')
.map(function(value, key) {
return {
date: key,
activities: [{
type: _.pluck(value, 'type'),
amount: _.pluck(value, 'amount')
}]
}
})
.value();
Run Code Online (Sandbox Code Playgroud)
我也试过这个(从这里/sf/answers/2196170231/)
var dateArr = {};
list.forEach(function(item){
dateArr[item.date] = dateArr[item.date]||[];
dateArr[item.date].push(item);
});
Run Code Online (Sandbox Code Playgroud)
但是,由于某些原因,两者都返回空.
任何帮助将不胜感激.
She*_*epy 11
几行现代JavaScript将为您提供所需的结果:
var dateArr = Object.values(list.reduce((result, {
date,
type,
amount
}) => {
// Create new group
if (!result[date]) result[date] = {
date,
activities: []
};
// Append to group
result[date].activities.push({
type,
amount
});
return result;
}, {}));
Run Code Online (Sandbox Code Playgroud)
阐释:
Array.reduce
巩固列表转换成一组结果,一个普通的对象,按日期分组.reduce
,以便下一个项目合并到同一个集合中.Object.values
从集合中提取值.(放下钥匙)您可以将哈希表用于按日期分组,并将单个组分配给结果数组。
var list = [{ date: "2017-01-01", type: "type1", amount: 100 }, { date: "2017-01-01", type: "type2", amount: 150 }, { date: "2017-01-02", type: "type1", amount: 200 }],
result = [];
list.forEach(function (hash) {
return function (a) {
if (!hash[a.date]) {
hash[a.date] = { date: a.date, activities: []};
result.push(hash[a.date]);
}
hash[a.date].activities.push({ type: a.type, amount: a.amount });
};
}(Object.create(null)));
console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12623 次 |
最近记录: |