Как избавиться от дубликации в ответе
День добрый! Нужна помощь. При выводе в консоль должно быть так
"500 руб: '1 шт', 200 руб: '2 шт', 50 руб: '1 шт', 10 руб: '2 шт', 5 руб: '1 шт'"
но выводит почему то
"500 руб: '1 шт', 200 руб: '1 шт1 шт', 50 руб: '1 шт', 10 руб: '1 шт1 шт', 5 руб: '1 шт'".
Я в принципе понимаю почему так но как это исправить и сделать как надо не очень понимаю.
let cash = prompt('Внесённая сумма клиентом: ')
let summa = prompt('Сумма заказа: ')
const coins = [5000, 2000, 1000, 500, 200, 100, 50, 10, 5, 2, 1];
const back = [];
function getBack(sum) {
let coin = coins.filter(c => c <= sum)[0];
back.push(coin);
sum -= coin;
if (sum) {
getBack(sum)
};
return back
};
count = function (ary, classifier) {
classifier = classifier || String;
return ary.reduce(function (counter, item) {
let p = `${classifier(item)} руб`;
counter[p] = `${counter.hasOwnProperty(p) ? counter[p] + 1 : 1} шт`;
return counter;
}, {})
};
cc = count(getBack (cash - summa));
console.log(cc);
Ответы (1 шт):
Автор решения: SwaD
→ Ссылка
Решение первое, простое, суммировать цифры, а уже потом переводить в строку с "шт"
let cash = prompt('Внесённая сумма клиентом: ')
let summa = prompt('Сумма заказа: ')
const coins = [5000, 2000, 1000, 500, 200, 100, 50, 10, 5, 2, 1];
const back = [];
function getBack(sum) {
let coin = coins.filter(c => c <= sum)[0];
back.push(coin);
sum -= coin;
if (sum) {
getBack(sum)
}
return back
}
const count = function (ary, classifier) {
classifier = classifier || String;
const result = ary.reduce(function (counter, item) {
let p = `${classifier(item)} руб`;
counter[p] = counter.hasOwnProperty(p) ? counter[p] + 1 : 1;
return counter;
}, {});
for (let i in result) {
result[i] = result[i] + ' шт.'
}
return result
};
const cc = count(getBack (cash - summa));
console.log(cc);