export interface ISum {
subscript: number;
num: number[];
sumOfNum?: number;
}
/**
* 变换形式
* * eg:
* 如下数组:
* ```
* [
* {data:[11, null, null]},
* {data:[null, 2, 8]}
* ]
* ```
* 变成:
*
* ```
* [
* {subscript: 0, num: [11, 0],},
* {subscript: 1, num: [0, 2]},
* {subscript: 2, num: [0, 8]},
* ]
*
* ```
*/
private integrateSum(list) {
const newArr: ISum[] = [];
list.forEach((e) => {
if (e.data.length !== 0) {
e.data.forEach((j, k) => {
const num = j === null ? 0 : (j as number);
// new item include subscript and totalReject
const values: ISum = {
subscript: k,
num: [num],
};
const sameSubscript = newArr.findIndex((c) => c.subscript === k);
if (sameSubscript !== -1) {
newArr[sameSubscript].num.push(num);
} else {
newArr.push(values);
}
});
}
});
return newArr;
}
/** 算和
* ```
* [
* {subscript: 0, num: [11, 0],},
* {subscript: 1, num: [0, 2]},
* {subscript: 2, num: [0, 8]},
* ]
* ```
* 变成
* ```
* [
* {subscript: 0, num: [11, 0], sumOfNum: 11},
* {subscript: 1, num: [0, 2], sumOfNum: 2},
* {subscript: 2, num: [0, 8], sumOfNum: 8},
* ]
* ```
*/
private sumNum(newArr: ISum[]): ISum[] {
return newArr.map((e) => {
const sum = e.num.reduce((total, num) => total + num);
return {...e, sumOfNum: sum};
});
}
/**
*先调用第一个方法, 然后调用第二个方法,你就可以得到一个数组,然后处理一下即可
*/
private getSum() {
const sum: string[] = [];
this.sumNum(this.integrateSum(list)).forEach((e) => {
sum.push(e.sumOfNum);
});
}
多个数组求和
最新推荐文章于 2023-09-10 21:57:25 发布