我有一些对象数组,我需要计算每行的总值和每列的总值,最后我将使用 Javascript 为每个对象添加新的键。我在下面解释我的代码。
我的输入如下。
let book_data= [
{ BranchName: 'Deeksha, Thanisandra, Bengaluru',
Uniform: 2,
Shoes: 1,
Accessories: 1,
Books: 5,
},
{ BranchName: 'Deeksha, Thanisandra, Bengaluru',
Uniform: 2,
Shoes: 3,
Accessories: 4,
Books: 5,
}
]
这里我需要向每一行再添加一列即总计
,这应该包含所有键值的总和,而不是BranchName
。同样,我需要再追加一个新记录作为最后一行,并且它应该包含每列的总值。我在下面给出了示例输出。
我在下面解释我的代码。
for(let i=0; i<book_data.length; i++) {
let grandRowTotal = 0;
for(let key in book_data[i]) {
if(key !== 'BranchName') {
console.log('key', book_data[i][key]);
grandRowTotal += parseInt(book_data[i][key]);
}
}
book_data[i]['Grand Total'] = grandRowTotal;
console.log('grandRowTotal', book_data[i],book_data);
}
根据我的代码,它没有给出预期的结果。我需要根据上面的示例输出计算每行和每列值的总和。
最佳答案
我创建了一个额外的数组来跟踪列。
- 基本上,我下面所做的是循环遍历
book_data
的原始数组。 - 在每次迭代中,我还会循环遍历每本书的
列
数据。 - 这允许我修改
GrandTotal
对象和RowTotal
数据
在您的问题中,您有两个循环来循环图书数据。这是没有必要的。由于它是一个数组,因此您可以简单地在数组上使用 forEach
方法。
希望这有帮助:)
var book_data = [{
BranchName: 'Deeksha, Thanisandra, Bengaluru',
Uniform: 2,
Shoes: 1,
Accessories: 1,
Books: 5,
},
{
BranchName: 'Deeksha, Thanisandra, Bengaluru',
Uniform: 2,
Shoes: 3,
Accessories: 4,
Books: 5,
}
];
var ColumnTotals = {
BranchName: 'Grand Total'
};
var columns = ['Uniform', 'Shoes', 'Accessories', 'Books'];
book_data.forEach(b => {
let rowTotal = 0;
columns.forEach(i => {
if (b[i] === undefined) {
return;
}
ColumnTotals[i] = ColumnTotals[i] || 0;
ColumnTotals[i] += b[i];
rowTotal += b[i];
})
b.RowTotal = rowTotal;
});
// Calculate RowTotal for ColumnsTotals
columns.forEach(i => {
ColumnTotals.RowTotal = ColumnTotals.RowTotal || 0;
ColumnTotals.RowTotal += ColumnTotals[i];
})
// Adding ColumnTotals to the Array
book_data.push(ColumnTotals);
console.log('BookData', book_data);
console.table(book_data);
关于javascript - 无法使用 Javascript 从对象数组中添加行总和和列总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62193281/