在 JavaScript 中用相似鍵對陣列值進行求和


假設某公司一段時間內出售和購買的股票的相關資料儲存在一個數組中。

const transactions = [
   ['AAPL', 'buy', 100],
   ['WMT', 'sell', 75],
   ['MCD', 'buy', 125],
   ['GOOG', 'sell', 10],
   ['AAPL', 'buy', 100],
   ['AAPL', 'sell', 100],
   ['AAPL', 'sell', 20],
   ['DIS', 'buy', 15],
   ['MCD', 'buy', 10],
   ['WMT', 'buy', 50],
   ['MCD', 'sell', 90]
];

我們要編寫一個函式來處理這些資料並返回一個物件作為陣列,其中作為鍵的股票名稱(例如“AAPL”、“MCD”),作為值的是包含兩個數字的陣列,其中第一個元素表示總購買,第二個元素表示總出售。因此,執行此操作的程式碼為 -

示例

const transactions = [
   ['AAPL', 'buy', 100],
   ['WMT', 'sell', 75],
   ['MCD', 'buy', 125],
   ['GOOG', 'sell', 10],
   ['AAPL', 'buy', 100],
   ['AAPL', 'sell', 100],
   ['AAPL', 'sell', 20],
   ['DIS', 'buy', 15],
   ['MCD', 'buy', 10],
   ['WMT', 'buy', 50],
   ['MCD', 'sell', 90]
];
const digestTransactions = (arr) => {
   return arr.reduce((acc, val, ind) => {
      const [stock, type, amount] = val;
      if(acc[stock]){
         const [buy, sell] = acc[stock];
         if(type === 'buy'){
            acc[stock] = [buy+amount, sell];
         }else{
            acc[stock] = [buy, sell+amount];
         }
         }else{
            if(type === 'buy'){
               acc[stock] = [amount, 0];
            }else{
               acc[stock] = [0, amount];
         }
      }
      return acc;
   }, {});
};
console.log(digestTransactions(transactions));

輸出

控制檯中的輸出將為 -

{
   AAPL: [ 200, 120 ],
   WMT: [ 50, 75 ],
   MCD: [ 135, 90 ],
   GOOG: [ 0, 10 ],
   DIS: [ 15, 0 ]
}

更新時間: 2020 年 8 月 21 日

449 次瀏覽

開啟你的 職業生涯

完成課程後獲得認證

開始
廣告