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