以前对数组的reduce方法理解的不深,但是最近在项目中遇到使用reduce方法很快的解决问题
1、可以计算求和
let array=[1,2,3,4,5,8]
let sum=array.reduce((prev,current,index)=>{
return prev=prev+current
},0)
//sum=23
2、去重
let array=[1,2,2,4,5,8]
let sum=array.reduce((prev,current,index)=>{
if(prev.indexOf(current)==-1){
prev.push(current)
}
return prev
},[])
//sum=[1,2,4,5,8]
3、就是处理后台返回的数据是同一天返回两条数据
let data=[
{
gmtCreate: 1605681285000,
gmtUpdate: 1605681285000,
id: 184,
originalPrice: 160,
spuId: 17,
spuImg: "http://tx.enn.cn/group1/M00/03/11/CiaAUl-t-LyARTXEAAEI7_ToFMY156.jpg",
spuPrice: 160,
spuTitle: "祖山好礼山珍礼盒",
time: "11月18日",
userId: 91,
},
{
gmtCreate: 1605681273000,
gmtUpdate: 1605681273000,
id: 183,
originalPrice: 120,
spuId: 18,
spuImg: "http://tx.enn.cn/group1/M00/03/11/CiaAUl-t-DaARIWFAAEcOycezSU706.jpg",
spuPrice: 120,
spuTitle: "祖山好礼杂粮礼盒",
time: "11月18日",
userId: 91,
} ,
{
gmtCreate: 1605681273000,
gmtUpdate: 1605681273000,
id: 183,
originalPrice: 120,
spuId: 18,
spuImg: "http://tx.enn.cn/group1/M00/03/11/CiaAUl-t-DaARIWFAAEcOycezSU706.jpg",
spuPrice: 120,
spuTitle: "祖山好礼杂粮礼盒",
time: "11月18日",
userId: 91,
},
{
gmtCreate: 1605182155000,
gmtUpdate: 1605681279000,
id: 136,
originalPrice: 140,
spuId: 16,
spuImg: "http://tx.enn.cn/group1/M00/03/11/CiaAUl-t-NmAU9aqAADSqMutZFs055.jpg",
spuPrice: 140,
spuTitle: "祖山好礼坚果礼盒",
time: "11月12日",
userId: 91,
}
]
data.sort((a, b) => {
if (a.gmtCreate < b.gmtCreate) return 1
else if (a.gmtCreate > b.gmtCreate) return -1
else return 0
})
console.log("data==", data)
goodList = data.reduce((prev, curr, currentIndex) => {
let length = prev.length
if (currentIndex >= 1) {
let lastData = prev[length - 1]
if (curr.time != lastData.time) {
prev.push({
...curr,
data: [{
...curr
}]
})
return prev
} else {
lastData.data.push({
...curr
})
return prev
}
} else {
return [{
...curr,
data: [{
...curr
}]
}]
}
}, [])
这样就可以根据所有是同一天的数据都放在一个对象中,
最后在页面中展示数据