【发布时间】:2019-08-10 14:39:31
【问题描述】:
我有一个这样的数组
let oldArray=[
{type:16,img:['1']},
{type:16,img:['2']},
{type:16,img:['3']},
{type:17,img:['4']}
]
如果类型相同,我想连接值。 我想要的结果是:
let newArray=[
{type:16,img:['1','2','3']},
{type:17,img:['4']}
]
我尝试使用reduce函数:
oldArray.reduce((acc,cur,idx,src)=>{
if(cur.type===a[idx+1].type){
cur.img.concat(a[idx+1].img);
acc.push(cur)
} else {
acc.push(a[idx+1])
}
return acc
},[])
好像有错误 任何人都可以帮忙吗?谢谢。
Bibberty 方案的替代方案:flatMap 比reduce 清晰得多
let newArray = [...new Set(oldArray.map(e => e.type))]
.map(e => {
return {
type: e,
img: (oldArray.filter(i => i.type === e).map(x => x.img)).reduce((acc,cur,idx,src)=>{
let length=src.length
let tep=cur.concat(src[idx+1]);
src[idx+1]=tep
return src[idx=length-1]
},[])
}
});
console.log(newArray);
【问题讨论】:
-
搜索如何在数组上执行“groupBy”
标签: javascript arrays loops object duplicates