如何在JS中存储常见费用数据

时间:2019-06-15 20:14:19

标签: javascript data-structures

我一般都不熟悉JS和编程。我正在为彼此付款的人编写费用计算器。计算器应允许个人为整个团体或部分团体或一个人付费。 我的问题是我不知道如何存储每对人的数据。 假设一个小组由5个人组成。鲍勃付给爱丽丝10美元。爱丽丝为鲍勃,约翰和她自己支付了50美元,约翰为整个团队支付了35美元。

存储这种计算的更好方法是什么?

我当时在考虑使用对象,但似乎不适合这种情况

我需要一种方法来存储组中每对人的债务,以便我可以轻松地修改此信息。

2 个答案:

答案 0 :(得分:1)

我将使用对象(如果不需要保存所有交易):

假设它是3人一组

const Bob = {
    friends: [
        {Alice: 10},
    ],
};

const Alice = {
    friends: [
        {Bob: 50/3},
        {John: 50/3},
    ],
};

const John = {
    friends: [
        {Bob: 35/3},
        {Alice: 35/3},
    ],
};

const groupOfFriends = [Bob, Alice, John];

我认为从这种数据结构中,您可以推测出谁欠谁东西。

答案 1 :(得分:1)

我只保留一系列交易:

 const all = Symbol();

 const transactions = [
   { from: "Alice", to: "Bob", amount: 500 },
   { from: "Bob", to: all, amount: 1000 }
 ];

这样,您可以轻松添加新交易,例如

  transactions.push({ from: "Bob", to: "Alice", amount: 500 });

要获得两个人之间的当前余额,您可以查看交易并进行汇总:

  let balance = 0; // from Alice to Bob
  for(const { from, to, amount } of transactions) {
     if(from === "Alice" && (to === "Bob" || to === all))
        balance += amount;
     if(from === "Bob" && (to === "Alice" || to === all))
        balance -= amount;
  }