# 遍历数组，将数组中key值相同的对象合并

  定义一个空数组接收汇总
const TotalData = [];
// 拿到明细数据 tempData 进行遍历
tempData.forEach((value, key) => {
//判断过滤后的数组是否为空
if (TotalData.length == 0) {
TotalData.push(value);
} else {
TotalData.forEach((valueIndex, keyIndex) => {
if (valueIndex.itemCode && valueIndex.itemCode !== value.itemCode) {
TotalData.push(value);
} else if (
valueIndex.itemCode &&
valueIndex.itemCode === value.itemCode
) {
// 含税金额
valueIndex.totalAmt = valueIndex.totalAmt + value.totalAmt;
// 含税金额本位币
valueIndex.totalCurAmt =
valueIndex.totalCurAmt + value.totalCurAmt;
//  不含税金额
valueIndex.exclTaxAmt = valueIndex.exclTaxAmt + value.exclTaxAmt;
//  不含税金额本位币
valueIndex.exclTaxCurAmt =
valueIndex.exclTaxCurAmt + value.exclTaxCurAmt;
//  税额
valueIndex.taxAmt = valueIndex.taxAmt + value.taxAmt;
//  税额本位币
valueIndex.taxCurAmt = valueIndex.taxCurAmt + value.taxCurAmt;
}
});
}
});


  sum = async (data) => {
var arrayFilted = [];
data.forEach(function (value, key) {
//判断过滤后的数组是否为空
if (arrayFilted.length == 0) {
console.log('222');
arrayFilted.push(value);
console.log('arrayFilted');
} else {
console.log('333');
arrayFilted.forEach(function (valueIndex, keyIndex) {
console.log(valueIndex);
if (valueIndex.itemCode && valueIndex.itemCode !== value.itemCode) {
console.log('444');
arrayFilted.push(value);
} else if (
valueIndex.itemCode &&
valueIndex.itemCode === value.itemCode
) {
console.log('555');
valueIndex.qty = valueIndex.qty + value.qty;
// 含税金额
valueIndex.totalAmt += value.totalAmt;
// 含税金额本位币
valueIndex.totalCurAmt += valueIndex.totalCurAmt;
//  不含税金额
valueIndex.exclTaxAmt += valueIndex.exclTaxAmt;
//  不含税金额本位币
valueIndex.exclTaxCurAmt += valueIndex.exclTaxCurAmt;
//  税额
valueIndex.taxAmt = valueIndex.taxAmt + value.taxAmt;
//  税额本位币
valueIndex.taxCurAmt = valueIndex.taxCurAmt + value.taxCurAmt;
}
});
}
});
await this.state.getDetailTableRef.clearRows();
await this.state.getDetailTableRef.addRows(arrayFilted);
await this.forDataArr(arrayFilted);
return arrayFilted;
};


  onDetailValuesChange = async (
changedValues,
allValues,
record,
formRef,
editTableRef,
extraData
) => {
if (
Object.keys(changedValues)[0] === 'itemCode' ||
Object.keys(changedValues)[0] === 'qty' ||
Object.keys(changedValues)[0] === 'exclTaxPrice' ||
Object.keys(changedValues)[0] === 'price'
) {
this.calcTotalAmt(true, extraData);
}
};
calcTotalAmt = async (isDetailEditing = false, extraData: any = {}) => {
const Assemble = this.state.editTableRef.getRows(); // 重新拿到表格数据
this.sunArr(Assemble);
}；
//当编辑了表格时把重新得到的表格数据 进行数据的数值相加处理
sunArr = async (data) => {
data.forEach((x) => {
if (x.itemCode.itemCode) {
x.itemCode.itemCode = x.itemCode.itemCode;
} else {
x.itemCode.itemCode = x.itemCode.spuCode;
}
});
const newData = {};
data.map((item) => {
if (newData.hasOwnProperty(item.itemCode.itemCode)) {
newData[item.itemCode.itemCode].push(item);
} else {
newData[item.itemCode.itemCode] = [];
newData[item.itemCode.itemCode].push(item);
}
});
let newArrData = [];
for (let key in newData) {
let qty = 0;
let totalAmt = 0;
let totalCurAmt = 0;
let exclTaxAmt = 0;
let exclTaxCurAmt = 0;
let taxAmt = 0;
let taxCurAmt = 0;
let itemCode = '';
let itemName = '';
let smallCateCode = '';
let smallCateName = '';
newData[key].map((items) => {
console.log(items);
qty = items.qty + qty; // 数量;
totalAmt = items.totalAmt + totalAmt; // 含税金额
totalCurAmt = items.totalCurAmt + totalCurAmt; // 含税金额本位币
exclTaxAmt = items.exclTaxAmt + exclTaxAmt; //  不含税金额
exclTaxCurAmt = items.exclTaxCurAmt + exclTaxCurAmt; //  不含税金额本位币
taxAmt = items.taxAmt + taxAmt; //  税额
taxCurAmt = items.taxCurAmt + taxCurAmt; //  税额本位币
itemCode = items.itemCode.itemCode || items.itemCode; //spuCode
itemName = items.itemCode.spuName || items.itemName;
smallCateCode = items.itemSource || items.smallCateCode;
smallCateName = items.itemSourceName || items.smallCateName;
});
console.log(' newData[key]', newData[key]);
newData[key] = {
...newData[key][0],
qty,
totalAmt,
totalCurAmt,
exclTaxAmt,
exclTaxCurAmt,
taxAmt,
taxCurAmt,
itemCode,
itemName,
smallCateCode,
smallCateName
};
// 对象转成数组
newArrData.push(newData[key]);
}

// console.log(newArrData);
// 清空并实时创建
await this.state.getDetailTableRef.clearRows();
await this.state.getDetailTableRef.addRows(newArrData);
await this.forDataArr(newArrData);
return newArrData;
};
效果就是下边的图样，实时汇总和更新（就要删除和新增表格。）


var a = [
{
BondKey: "010221.IB",
BondName: "01国开21",
amount:2000
},
{
BondKey: "010221.IB",
BondName: "01国开21",
amount:2000
},
{
BondKey: "011800642.IB",
BondName: "18珠海港SCP002",
amount:2000
}
]
console.log(a);

function mergeObject( array ) {
var arrayFilted = [];
array.forEach(function (value,key) {
//判断过滤后的数组是否为空
if ( arrayFilted.length == 0 ) {
arrayFilted.push(value);
}else{
arrayFilted.forEach( function (valueIndex,keyIndex) {
if (valueIndex.BondKey && valueIndex.BondKey !== value.BondKey) {
arrayFilted.push(value);
}else if (valueIndex.BondKey && valueIndex.BondKey === value.BondKey) {
valueIndex.amount = valueIndex.amount + value.amount;
}
});
}
});
return arrayFilted;
}
console.log(mergeObject(a));


• 0
点赞
• 1
收藏
• 打赏
• 0
评论
07-14
10-12 742
12-26 487
10-14 262
07-13 2721
10-25 1万+
06-12 104
05-15 1079
11-16 364
09-03 2401
07-22 1130
10-07 252

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。