Как избавиться от дубликации в ответе

День добрый! Нужна помощь. При выводе в консоль должно быть так

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

→ Ссылка