Как рассчитать сумму значений массива транзакций Plaid API в скрипте Java? - PullRequest
0 голосов
/ 08 января 2020

Извиняюсь за потенциально глупый вопрос - я довольно новичок в кодировании / JavaScript.

Я использую среду песочницы * Plaid для получения данных транзакций в среде песочницы. Прямо сейчас я определяю следующее как транзакции данных:

    let transactionsData = [];
transactions.forEach(function(account) {
  account.transactions.forEach(function(transaction) {
    transactionsData.push({
      account: account.accountName,
      date: transaction.date,
      category: transaction.category[0],
      name: transaction.name,
      amount: transaction.amount
    });
  });
});

Я могу успешно визуализировать отдельные транзакции строка за строкой в ​​ таблице материалов примерно так:

    const transactionsColumns = [
  { title: "Account", field: "account" },
  { title: "Date", field: "date", type: "date", defaultSort: "desc" },
  { title: "Name", field: "name" },
  { title: "Amount", field: "amount", type: "numeric" },
  { title: "Category", field: "category" }
];

          <MaterialTable
            columns={transactionsColumns}
            data={transactionsData}
            }}

Я знаю, что это должно быть очень просто, но все, что я хочу сделать, это суммировать транзакцииData и отображать это единственное суммированное значение в другом месте на моей странице. Если я напишу TransactionsData.length, я могу получить количество транзакций довольно легко. Я пробовал следующий несколько похожий синтаксис, но не нашел его работоспособным:

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

Любая помощь будет высоко ценится.

1 Ответ

2 голосов
/ 08 января 2020

Вот всего, используя Array.prototype.reduce:

const transformed = [{"account":"Navy Federal Credit Union","date":"2020-01-01","category":"Travel","name":"United Airlines","amount":500},{"account":"Navy Federal Credit Union","date":"2019-12-30","category":"Travel","name":"Uber 072515 SF**POOL**","amount":6.33},{"account":"Navy Federal Credit Union","date":"2019-12-27","category":"Food and Drink","name":"Tectra Inc","amount":500}]

const unrounded = transformed.reduce(
  (acc, { amount }) => acc + amount,
  0
);

const roundCents = amount => Math.round(amount * 100) / 100;

const total = roundCents(unrounded);

console.log(total);

Более простая версия вышеперечисленного, без разрушения:

const transformed = [{"account":"Navy Federal Credit Union","date":"2020-01-01","category":"Travel","name":"United Airlines","amount":500},{"account":"Navy Federal Credit Union","date":"2019-12-30","category":"Travel","name":"Uber 072515 SF**POOL**","amount":6.33},{"account":"Navy Federal Credit Union","date":"2019-12-27","category":"Food and Drink","name":"Tectra Inc","amount":500}]

const unrounded = transformed.reduce(
  (acc, transaction) => acc + transaction.amount,
  0
);

const roundCents = amount => Math.round(amount * 100) / 100;

const total = roundCents(unrounded);

console.log(total);

А вот как преобразовать transactionsData с Array.prototype.flatMap и Array.prototype.map, а не forEach:

const transactionsData = [{ accountName: 'a1', transactions: [{ date: '2020', category: ['c1'], name: 'n1', amount: 100 }, { date: '2020', category: ['c2'], name: 'n2', amount: 100 }]}, { accountName: 'a2', transactions: [{ date: '2020', category: ['c3'], name: 'n3', amount: 100 }, { date: '2020', category: ['c4'], name: 'n4', amount: 100 }]}]

const transformed = transactionsData.flatMap(({ accountName, transactions }) =>
  transactions.map(({ date, category, name, amount }) => ({
      account: accountName,
      date,
      category: category[0],
      name,
      amount
    })
  )
);

console.log(transformed)

И снова, более простая версия, без деструктуризации:

const transactionsData = [{ accountName: 'a1', transactions: [{ date: '2020', category: ['c1'], name: 'n1', amount: 100 }, { date: '2020', category: ['c2'], name: 'n2', amount: 100 }]}, { accountName: 'a2', transactions: [{ date: '2020', category: ['c3'], name: 'n3', amount: 100 }, { date: '2020', category: ['c4'], name: 'n4', amount: 100 }]}]

const transformed = transactionsData.flatMap(account =>
  account.transactions.map(transaction => ({
      account: account.accountName,
      date: transaction.date,
      category: transaction.category[0],
      name: transaction.name,
      amount: transaction.amount
    })
  )
);

console.log(transformed)

Array.prototype.map - правильный метод для использования, если вы хотите создать новый массив из существующего, и Array.prototype.flatMap - правильный метод для использования, если вам нужно плоский массив и map сгенерируют вложенный массив.

...