当前位置: 首页 > 知识库问答 >
问题:

无法使用 Java 脚本从对象数组中添加行和和列和

齐铭
2023-03-14

我有一些对象数组,我需要计算每一行的总值和每一列的总值,最后我将使用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);

    }

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

共有3个答案

公孙栋
2023-03-14

你需要一个对象来保存汇总数据,我把你的代码改成这样。< 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)
郑博厚
2023-03-14

您的问题是< 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

这应该足够解决它了

阴靖
2023-03-14

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

  1. 基本上,我在下面做的是循环遍历原始的book_data数组。
  2. 在每次迭代中,我还循环遍历每本书的数据。
  3. 这允许我修改“总计”对象和“行总计”数据

在您的问题中,您有两个循环来遍历图书数据。这是不必要的。因为它是一个数组,所以您可以简单地在数组上使用< 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列表: 我怎么能那样做?