上图为源数据
想得到如图所示的结果(想根据 time 这个属性合并数据)
var arr = [
{time:"a", a:1},
{time:"a", b:2},
{time:"b", a:1},
{time:"b", b:6},
{time:"c", a:10},
];
arr.reduce((p,c)=>{
if(p.find(item=>item.time === c.time)){
Object.assign(p.find(item=>item.time === c.time),c)
}else{
p.push(c)
}
return p
},[])
let list = [
{ time: 0.1, h1: 322 },
{ time: 0.1, h2: 122 },
{ time: 0.3, h1: 22 },
{ time: 0.1, h4: 562 },
{ time: 2.1, h1: 22 },
{ time: 3.1, h1: 32 },
{ time: 2.1, h1: 321 },
];
let newList = list.reduce((a, c) => {
let index = a.findIndex((e) => e.time == c.time);
if (index != -1) {
a[index] = { ...a[index], ...c };
} else {
a.push(c);
}
return a;
}, []);
console.log("newList: ", newList);
代码
var list = [{time:1.5,h1:'33'},{time:1.5,h2:'833'},{time:0.1,h1:'11'}]
Object.values(list.reduce((acc,cur)=>(Object.assign((acc[cur.time]||={}),cur),acc),[]))
结果
0: {time: 1.5, h1: "33", h2: "833"}
1: {time: 0.1, h1: "11"}
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
此类key相同的合并问题都可以使用hash法来处理,定义一个对象以检测key是否存在,利用数组里对象的指向引用,将hash对象改变影响数组里面的对象,一次循环即可