Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tổng giá trị mảng theo khóa tương tự trong JavaScript

Giả sử đây là một mảng chứa dữ liệu về cổ phiếu được mua và bán bởi một công ty trong một khoảng thời gian.

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

Chúng ta muốn viết một hàm nhận vào dữ liệu này và trả về một đối tượng các mảng với khóa là tên cổ phiếu (như 'AAPL', 'MCD') và giá trị là mảng hai số, trong đó phần tử đầu tiên đại diện cho tổng mua và phần tử thứ hai đại diện cho tổng bán. Mã thực hiện như sau:

Ví dụ

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

Kết quả

Đầu ra trong console sẽ là:

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