Splitwise in pure JS
JavaScript
var noOfPerson = 4;
var personName = [];
var spendingHistory = {};
for (var i = 0; i < noOfPerson; i++) {
personName.push('A' + i);
}
function addSpending(personName, amount, toWhom) {
if (!spendingHistory[personName]) {
spendingHistory[personName] = {
"history": [{
amt: amount,
ppl: toWhom
}]
};
} else {
spendingHistory[personName].history.push({
amt: amount,
ppl: toWhom
});
}
}
function totalSpends(spendingHistory) {
var amtSpend = {};
for (var i in spendingHistory) {
var spendings = spendingHistory[i].history;
for (var spend in spendings) {
var amt = spendings[spend].amt;
for (var p in spendings[spend].ppl) {
if (amtSpend[spendings[spend].ppl[p]]) {
amtSpend[spendings[spend].ppl[p]] = amtSpend[spendings[spend].ppl[p]] + (amt / spendings[spend].ppl.length);
} else {
amtSpend[spendings[spend].ppl[p]] = amt / spendings[spend].ppl.length;
}
}
}
}
return amtSpend;
}
function whoOwesHowMuch(spendings) {
var persons = {};
for (var per in spendings) {
var sp = spendings[per].history;
for (var s in sp) {
var person = sp[s].ppl;
var amt = sp[s].amt;
for(var ps in person){
if(per !=person[ps] && persons[person[ps]]){
persons[person[ps]].push({"amt":amt/person.length,"toWhom":per});
}else if(per !=person[ps]){
persons[person[ps]] = [{"amt":amt/person.length,"toWhom":per}];
}
}
}
}
console.log(persons);
}
addSpending(personName[0], 100, [personName[1], personName[2]]);
addSpending(personName[1], 200, [personName[2], personName[0]]);
addSpending(personName[2], 400, [personName[0], personName[2]]);
addSpending(personName[3], 10, [personName[3], personName[1]]);
var totalOwes = totalSpends(spendingHistory);
whoOwesHowMuch(spendingHistory,totalOwes);