js 数组中对象ID相同对某值进行相加去重
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
// 用户动态写入数据
let res = [
{
main: 'cs 1',
bsssssss: 0,
isShowMainInput: false,
subject: {
number: '',
name: '',
detailJson: '',
subjectCodeId: 1,
subjectCode: '1001',
subjectName: ''
},
isShowSubjectInput: false,
debtor: 1000,
isShowDebtorInput: false,
lender: '',
isShowLenderInput: false,
isAuxiliary: false,
auxiliary: '',
},
{
main: 'cs 2',
bsssssss: 0,
isShowMainInput: false,
subject: {
number: '',
name: '',
detailJson: '',
subjectCodeId: 1,
subjectCode: '1001',
subjectName: ''
},
isShowSubjectInput: false,
debtor: 1000,
isShowDebtorInput: false,
lender: '',
isShowLenderInput: true,
isAuxiliary: false,
auxiliary: '',
},
{
main: 'cs 2',
bsssssss: 0,
isShowMainInput: false,
subject: {
number: '',
name: '',
detailJson: '',
subjectCodeId: 2,
subjectCode: '1001',
subjectName: ''
},
isShowSubjectInput: false,
debtor: 1000,
isShowDebtorInput: false,
lender: '',
isShowLenderInput: true,
isAuxiliary: false,
auxiliary: '',
}
]
// 方法
function getNewGoodsList(params) {
// status 0 借方 1 贷方
var temp = {}
for (var i in params) {
var key = params[i].subject.subjectCodeId // 判断依据
if (temp[key]) {
temp[key].id = params[i].subject.subjectCodeId
temp[key].status = params[i].status
temp[key].name = params[i].name
temp[key].debtor += Number(params[i].debtor)
temp[key].lender += Number(params[i].lender)
} else {
temp[key] = {}
temp[key].status = params[i].status
temp[key].id = params[i].subject.subjectCodeId
temp[key].name = params[i].name
temp[key].debtor = params[i].debtor !== '' ? parseInt(params[i].debtor) : 0
temp[key].lender = params[i].lender !== '' ? parseInt(params[i].lender) : 0
}
}
var newArry = []
for (var k in temp) {
newArry.push(temp[k])
}
return newArry
}
const statusType = (data) => {
if (data.debtor === '' && data.lender !== '') {
return true
}
return false
}
// 拼接数据格式
var arr = []
res.map(item => {
if (item.subject.subjectCodeId !== '') {
arr.push({
debtor: item.debtor,
lender: item.lender,
subject: item.subject,
status: statusType(item),
name: item.subject.name
})
return arr
}
})
const Arr = this.getNewGoodsList(arr)
res.map(item => {
Arr.map(items => {
if (item.subject.subjectCodeId === items.id) {
item.status = items.status
item.total = items.debtor - items.lender
}
})
})
console.log(res, '结果');
</script>
</body>
</html>