簡體   English   中英

如何在JavaScript中對兩個數組數據求和

[英]How to sum two arrays data in JavaScript

如何將第一個數組的數據與其中的數組數據求和?

一

這是我當前的代碼,僅在第一個數組上工作

calculateTotal: function(){
  var sum=0;
  for(var i=0;i<this.accounts.length;i++){
     sum += this.accounts[i].balance;
  }
  return sum;
},

我應該在此代碼中進行哪些更改以獲得我想要的結果?

您不僅需要balance屬性,還需要在payments數組中添加每個balance屬性。 您可以使用reduce非常簡潔地進行此操作,將外部balance作為累加器的初始值傳遞:

 const obj = { accounts: [{ balance: 150000, payments: [{ balance: 100000, }, { balance: -200000, } ] }] }; const total = obj.accounts.reduce((a, { balance, payments }) => ( a + payments.reduce((accum, { balance }) => accum + balance, balance) ), 0); console.log(total); 

或者,以對象方法形式:

 const obj = { calculateTotal() { return obj.accounts.reduce((a, { balance, payments }) => ( a + payments.reduce((accum, { balance }) => accum + balance, balance) ), 0) }, accounts: [{ balance: 150000, payments: [{ balance: 100000, }, { balance: -200000, } ] }] }; console.log(obj.calculateTotal()); 

你可以試試這個嗎?

 calculateTotal: function(){
      var sum=0;
      for(var i=0;i<this.accounts.length;i++){
         sum += this.accounts[i].balance;
         // iterate over payments sub array in each account and add balance into the sum
         for(var j=0;j<this.accounts[i].payments.length;j++){
             sum += this.accounts[i].payments[j].balance;
         }
      }
      return sum;
    },

我只是嘗試制作一種更通用的解決方案類型來計算一個給定的鍵,該鍵可以嵌套到任意數量的數組或對象中。

summarize = (obj, sum_key) => {
  var sum = 0;
  for ( key in obj ) {
    if (key == sum_key) {
      sum += obj[key];
    } else if (typeof obj[key] == 'object' && obj[key]) {
      sum += summarize(obj[key]);
    }
  }
  return sum;
};

現在,您可以通過以下方式獲得所需的總和:

summarize(data, 'balance');

在這種情況下使用reduce

  sumOfPaymentBalance = accounts.payments.reduce((sum,currentValue)=> 
                          (sum+currentValue.balance),0);
    mainBalance = accounts.reduce(sum,paymentValue=>(sum,paymentValue.balance),0);
    sumOfPaymentBalance += mainBalance;
    console.log(sumOfBalance);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM