对象数组根据某一相同项示例为travelerEmpNum,合并其他属性为一个数组,主要包括对象数组根据某一相同项合并其他属性为一个数组,为项目需求
对象数组示例
let rows = [
{
"travelerName":"王晓&陈辰",
"travelerEmpNum":"1001&1002",
"expenseAmountTotal":1381,
"invoiceAmountTotal":1381
},
{
"travelerName":"王晓",
"travelerEmpNum":"1001",
"expenseAmountTotal":100,
"invoiceAmountTotal":100
},
{undefined
"travelerName":"王晓",
"travelerEmpNum":"1001",
"expenseAmountTotal":306,
"invoiceAmountTotal":306
}
],
合并后的结果
[
{
expenseAmountTotal: 1381,
invoiceAmountTotal: 1381,
travelerEmpNum: "1001&1002",
travelerName: "王晓&陈辰",
travelers: " 王晓 | 1001, 陈辰 | 1002",
},
{
expenseAmountTotal: 406,
invoiceAmountTotal: 406,
travelerEmpNum: "1001",
travelerName: "王晓",
travelers: " 王晓 | 1001",
},
]
实现方法
let result = rows.reduce((items, item) => { // 将相同属性相加并合并去重 (item.xx==arrItem.xx&&....)
let findData= items.find(arrItem => item.travelerEmpNum === arrItem.travelerEmpNum)
if (findData) {
findData.invoiceAmountTotal += item.invoiceAmountTotal
findData.expenseAmountTotal += item.expenseAmountTotal
} else {
//不要直接在原来的对象修改,新建对象
let newItem = {
expenseAmountTotal: item.expenseAmountTotal,
invoiceAmountTotal: item.invoiceAmountTotal,
travelerEmpNum: item.travelerEmpNum,
travelerName: item.travelerName,
}
items.push(newItem )
}
return items
},[])