我有一些对象数组,我需要计算每一行的总值和每一列的总值,最后我将使用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,
}
]
在这里,我需要在每一行中再添加一个列,即-Grand总
,这应该包含所有键值的总和,而不是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);
}
根据我的代码,它没有给出预期的结果。我需要这里的每一行和每列值的总和,根据我上面的示例输出。
你需要一个对象来保存汇总数据,我把你的代码改成这样。< br > < code > summary 对象的字段是动态添加的,您不需要为每个字段声明一个变量。
它有两个优点:
1。当每行有不同的字段时,这是有益的
2.将来,类似car:10
的字段会添加到数据中,您无需更改代码。
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,
},
]
// the last row that show the summary
const summary = { BranchName: 'Grand Total', GrandTotal: 0 }
for (let i = 0; i < book_data.length; i++) {
let grandRowTotal = 0
for (let key in book_data[i]) {
if (key !== 'BranchName') {
const amount = parseInt(book_data[i][key])
grandRowTotal += amount
// calc the summary
if (summary[key] === undefined) {
summary[key] = 0
}
summary[key] += amount
summary['GrandTotal'] += amount
}
}
book_data[i]['GrandTotal'] = grandRowTotal
}
book_data.push(summary)
console.log(book_data)
您的问题是< code>book_data[i]是一个对象而不是一个数组,所以您不能使用< code>for。
但是,您可以使用 Object.keys()
来获取对象键的数组,然后像往常一样进行迭代:
let key in Object.keys(book_data[i]) // instead of 'let key in book_data[i]' in your for
这应该足够解决它了
我创建了一个额外的数组来跟踪列。
book_data
数组。 列
数据。 “总计”
对象和“行总计”
数据在您的问题中,您有两个循环来遍历图书数据。这是不必要的。因为它是一个数组,所以您可以简单地在数组上使用< code>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);
我有一个来自以下用户的消息列表: 我想从这个消息对象列表中计数并显示。有代码帮助吗?
我试图让用户输入日期来存储它,但我似乎无法将其记录下来。 当我试图将创建的对象添加到数组时,问题就来了。 以下是另一个类,以供setDay,setMonth,setyear参考:public class OurDate{private int day;private int month;private int year;
我需要创建一个对象(银行),其中包含一组客户端和bankID。我的问题是,我不知道如何在主函数中创建银行。 银行类别: 客户端类: 主要类别: 这些是问题所在: 你必须创建一个程序来模拟银行活动。该系统包括以下模块:银行—客户(客户数组)— idBank(字符串)5 BancAccount — accountNumber(字符串)—金额(浮点)客户—姓名(字符串)—地址(字符串)—账户(银行账户数
我想从特定字段中搜索关键字并返回文档。在这些文档之上,我希望遍历每个嵌套对象,并从选定文档的同一特定字段中再次搜索关键字。 如果关键字存在,则检查:如果布尔isCurrent = True,则设置isCurrent=0,并将该值追加到列表中;否则,如果isCurrent = False,则取当前日期时间的差值,结束日期时间,并获得以月为单位的值,并将该值追加到列表中。 最后,从每个文档的列表中获取
我一直在做一个关于类继承的练习 问题如下:有三种主要类型的文件, 一个类Zoo文件(包含主方法) 一个抽象类动物文件 和任何数量的特定动物(牛,马,无论什么),它们是派生的类,你猜对了,类动物。 我的问题存在于这里的add方法中。我在第一个if语句中不断得到一个空指针异常 以及第一次在main方法中调用add方法。很明显,这种情况有点不对劲,很可能是伴随它的else if情况。 对于我的生活,我无
我有List sample1=lists.newarrayList(BIGINTEGER1,BIGINTEGER2,BIGINTEGER3); 我必须创建一个新的列表sample2,其中还有一个值“bigInteger4”,以及sample1列表: 我怎么能那样做?