JavaScript за Radu TM • June 10, 2022
// Алгоритм Splitwise
// 1. Починаємо з створення об'єкту "платеж". Цей об'єкт буде відслідковувати, хто скільки зобов'язується хто.
var payment = {};
// 2. Потім проходимо через кожного члена групи.
for (var i = 0; i < group.length; i++) {
// 3. Для кожної людини проходимо через кожного її друга.
for (var j = 0; j < group[i].friends.length; j++) {
// 4. Якщо друг не з'являється у об'єкті платежу, створюємо їх і встановлюємо їхній баланс у 0.
if (!payment.hasOwnProperty(group[i].friends[j])) {
payment[group[i].friends[j]] = 0;
}
// 5. Потім розраховуємо, скільки людина зобов'язується своєму другу. Ми робимо це, взявши загальну суму, яку вони витратили, поділивши її на кількість друзів, а потім віднімаючи суму, яку вже заплатив друг.
var amountOwed = (group[i].amount / group[i].friends.length) - payment[group[i].friends[j]];
// 6. Якщо сума, яку потрібно сплатити, менша за 0, це означає, що друг вже заплатив більше свого внеску, тому нам не потрібно робити нічого. В іншому випадку додаємо суму, яку потрібно сплатити, до об'єкту платежу.
if (amountOwed > 0) {
payment[group[i].friends[j]] += amountOwed;
}
}
}
// 7. Напоследок проходимо через об'єкт платежу і друкуємо, хто скільки зобов'язується хто.
for (var key in payment) {
console.log(key + ' owes ' + payment[key]);
}
0
20.762