javascript - 无法使用 Javascript 从对象数组中添加行总和和列总和

标签 javascript arrays

我有一些对象数组,我需要计算每行的总值和每列的总值,最后我将使用 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。同样,我需要再追加一个新记录作为最后一行,并且它应该包含每列的总值。我在下面给出了示例输出。

enter image description here

我在下面解释我的代码。

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);

    }

根据我的代码,它没有给出预期的结果。我需要根据上面的示例输出计算每行和每列值的总和。

最佳答案

我创建了一个额外的数组来跟踪列。

  1. 基本上,我下面所做的是循环遍历 book_data 的原始数组。
  2. 在每次迭代中,我还会循环遍历每本书的数据。
  3. 这允许我修改 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/

相关文章:

javascript - 当选项更改时,Jquery on Change 事件不会触发

c - 将带有\0 字符的字符数组传递给其他函数

c++ - c 和 c++ 中二维数组元素的类型是什么?

php - @$array ['possibly_missing_key' ] 是反模式吗?

arrays - 将 int/string 转换为长度为 n 的字节数组

arrays - 在一个衬里中选择数组中的 n 个最大值

javascript - 如何将隐藏的<dl>元素一个一个显示或者同时全部显示?

javascript - handlebars.js 未捕获类型错误 : Object #<Object> has no method 'call'

javascript - 为什么 Vue Composition API 设置函数中未定义 "this"?

javascript - 如何在 jquery 中获取 anchor 标记 url 哈希值?