我想将所有具有相同日期值的对象合并到一个对象数组中。
我已经尝试使用map函数。
我必须遵循对象的类型
[
{a:1, b:2, date:'2019-01-05'}, {a:12, b:22, date:'2019-01-05'}, {a:13, b:23, date:'2019-01-05'},
{a:11, b:2, date:'2019-01-06'}, {a:1, b:22, date:'2019-01-06'}, {a:1, b:23, date:'2019-01-07'}
]
现在我想要一个这样的对象,其中我汇总了所有具有相同日期的对象:
[{date:'2019-01-05', data:[{a:1,b:2},....and so on]}]
所以目前我想出了这个解决方案:
items = [...]
moddedItems = [];
this.items.map((data)=>{
let tempArray = this.items.filter((obj) => {
return obj.date === data.date;
});
this.moddedItems = [...this.moddedItems, {date:data.date, data:[...tempArray]}];
console.log(this.moddedItems)
});
答案 0 :(得分:2)
Array.map(...)
不适合在此处使用,因为您希望得到的数组中的元素数少于原始数组,因此可以使用Array.reduce(...)
生成所需的结果,下面是一个示例:>
const arr = [
{a:1, b:2, date:'2019-01-05'}, {a:12, b:22, date:'2019-01-05'}, {a:13, b:23, date:'2019-01-05'},
{a:11, b:2, date:'2019-01-06'}, {a:1, b:22, date:'2019-01-06'}, {a:1, b:23, date:'2019-01-07'}
];
const result = arr.reduce((a, c) => {
const o = {
a: c.a,
b: c.b
}
const found = a.find(({ date }) => date === c.date);
if (found) {
found.data.push(o)
} else {
a.push({
date: c.date,
data: [o]
})
}
return a;
}, []);
console.log(result)
答案 1 :(得分:1)
您可以使用以日期为键的Map
,对于每个对象,您最初都将存储一个具有空data
属性的对象,然后只需填充data
属性即可迭代原始数据:
const data = [
{a:1, b:2, date:'2019-01-05'}, {a:12, b:22, date:'2019-01-05'}, {a:13, b:23, date:'2019-01-05'},
{a:11, b:2, date:'2019-01-06'}, {a:1, b:22, date:'2019-01-06'}, {a:1, b:23, date:'2019-01-07'}
];
const map = new Map(data.map(({date}) => [date, { date, data: [] }]));
data.forEach(({date, ...o}) => map.get(date).data.push(o));
const result = [...map.values()];
console.log(result);