let list= [["现金",12,1,8],["算款",5,0,0],["回购",1,0,0],["到期",10,0,20],["存款",0,10,0],["其它",0,50,0]]
//每个数组里面对应下标累积相加,最后希望得到下面结果,请问该用什么方法去实现呢
{"0":"合计","1":28,"2":61,"3":28}
let list= [["现金",12,1,8],["算款",5,0,0],["回购",1,0,0],["到期",10,0,20],["存款",0,10,0],["其它",0,50,0]]
//每个数组里面对应下标累积相加,最后希望得到下面结果,请问该用什么方法去实现呢
{"0":"合计","1":28,"2":61,"3":28}
一楼的答案很正点。
简单方案:
let list= [
["现金",12,1,8],
["算款",5,0,0],
["回购",1,0,0],
["到期",10,0,20],
["存款",0,10,0],
["其它",0,50,0]
];
const handleData = (data) => {
// 获取最大下标
let maxIndex = data.map(item => item.length).sort((a,b)=> b-a)[0];
// 定义结果(数组)
let resArr = new Array(maxIndex).fill(0);
// 处理数据
data.forEach( item => {
item.forEach( (v, i) => {
resArr[i] += (v || 0)
})
});
// res转对象格式
let res = {};
resArr.forEach( (v, i)=> {
res[i] = i == 0 ? '合计' : v
});
return res;
}
console.log( handleData(list));
运行结果:
放了数据测了一下这个应该是运行最快的
var list= [["现金",12,1,8],["算款",5,0,0],["回购",1,0,0],["到期",10,0,20],["存款",0,10,0],["其它",0,50,0]];
function test2(list){
var obj = {'0':'合计'};
for(var x=0;x<list.length;x++){
for(var i=0;i<list[x].length;i++)
i>0&&(obj[i]=obj[i]==null?list[x][i]:obj[i]+list[x][i]);
}
return obj;
}
test2(list);
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
这个情景下用reduce比较符合语义