Javascript 避免if条件:3人的杂货店计算器

Javascript 避免if条件:3人的杂货店计算器,javascript,Javascript,我正试图为我的社区写一个简单的程序。 我们是三个人,每周都去杂货店购物。 在周末,我们聚在一起做一些会计核算,这样每个人都会花同样的钱 我想要的是一个输出如下内容的程序: “人A欠人B x钱 A个人欠C个人x钱” 对我来说,计算是否有人需要付出或是否有人得到钱是没有问题的。 我这样做(翻译成js伪代码): 是否有任何方法可以从这个结果得到我前面描述的输出,而不覆盖所有情况(如a个人支付较少,b个人支付过多,c个人支付过多等),如果有条件的话?解决方案是将组分为支出不足和支出过多 对于每对一个欠支

我正试图为我的社区写一个简单的程序。 我们是三个人,每周都去杂货店购物。 在周末,我们聚在一起做一些会计核算,这样每个人都会花同样的钱

我想要的是一个输出如下内容的程序:

“人A欠人B x钱

A个人欠C个人x钱”

对我来说,计算是否有人需要付出或是否有人得到钱是没有问题的。 我这样做(翻译成js伪代码):


是否有任何方法可以从这个结果得到我前面描述的输出,而不覆盖所有情况(如a个人支付较少,b个人支付过多,c个人支付过多等),如果有条件的话?

解决方案是将组分为支出不足和支出过多

对于每对一个欠支者和一个超支者,他们之间所欠的金额是欠支者的欠支金额或超支者的超支金额,以较小者为准(欠支者欠的金额不能超过他们欠支的金额,超支者收到的金额不应超过他们超支的金额)

请记住,这不适用于超过3人。如果超过3个,你只需要把债务集中起来,然后把它们分出去

在三人案件中,有四种可能的情况:

  • 所有人都支付了正确的金额——没有人欠任何人任何东西
  • 其中一个支付了正确的金额——所有债务都在另外两个之间。一个超支者超支的金额等于一个超支者超支的金额
  • 一个多付-他们的多付是另外两个少付的总和。因此,其他每个人都欠一个超支者他们超支的金额(比一个人超支的金额小)
  • 一个工资不足-他们的不足是另外两个超支的总和。不足者欠每个超支者他们超支的金额(小于一人超支的金额)
我第二段中的策略涵盖了所有支出不足/支出过度的关系(以每对人之间较小的金额为例)。如果你愿意的话,你可以为那些既没有超支也没有超支的人开一张支票

功能计算器(差速器){
const underspenders=差异过滤器(d=>d.amount<0);
const overspenders=差异过滤器(d=>d.amount>0);
const rightonspenders=差异。过滤器(d=>d.amount==0);
对于(让ros的权利支出){
log(`${ros.name}不欠任何东西`);
}
对于(让我们来谈谈未充分消费者){
对于(让超支者的操作系统){
log(`${us.name}欠${os.name}${Math.min(-us.amount,os.amount)}`);
}
}
}
console.log(“一人消费不足”);
calcDebts([
{名称:'a',金额:-3.25},
{名称:'b',金额:1.5},
{姓名:'c',金额:1.75}
]);
console.log(“一人超支”);
calcDebts([
{姓名:'a',金额:2.25},
{名称:'b',金额:-1.5},
{名称:'c',金额:-0.75}
]);
log(“一个人支付了正确的金额”);
calcDebts([
{姓名:'a',金额:1.25},
{名称:'b',金额:0},
{名称:'c',金额:-1.25}
]);
console.log(“全部支付正确的金额”);
calcDebts([
{name:'a',金额:0},
{名称:'b',金额:0},
{名称:'c',金额:0}

]);
那么您是否也要避免所有条件,如开关和三元运算符?或者只是一种更简洁的方法来编写条件句,而不是大的分支if?我正在寻找一种简洁的方法来快速解决问题(我想我会找到一些东西,但我还有9个案例要讨论)。我也有兴趣尽可能避免条件。我觉得有一种更优雅的方式,但我现在不能把我的头绕在它周围。除了试图找出谁欠谁多少钱之外,也许没有其他办法了,为什么不把每个人未花的钱集中起来,然后偿还那些超支的人呢?我的看法。计算每个人的计算金额和花费金额的差异(每个人x的sx-x)。按降序排序。对每个人来说,从欠债最多的那个人开始,给最后一个人他所需要的,一直到第一个人的债务还清为止。继续,直到列表完成(您需要跟踪付款和收款人索引)。这一解决方案应导致交易量最小,并建立在欠款最多的交易和欠款最多的交易的基础上。它会自动处理你们之间没有债务的边缘情况。@JLRishe这很好。我仍然必须提出一个条件,但情况正好相反(两人超支,一人超支)。为了简单起见,我现在就这样做。但这仍然不能真正回答我的问题
var a // ammount of money person a spend this week
var b // same for pers b
var c // you guess it

var fa // the factor person a was involved in eating the food (dont ask why)
var fb // this will be range 0 - 1 
var fc // and these 3 need to add up to 1

var sum = a + b + c

var x = sum / 3

//the ammount each person should have paid
var sa = x * fa
var sb = x * fb
var sc = x * fc

/*the resulting numbers tell if a person still needs to pay some money
or gets money and how much (negative or positive)*/
var ra = a - sa
var rb = b - sb
var rc = c - sc