Запятых нет в JavaScript числах - плюс, в конце цепочки функций topArr
вы все конвертируете обратно в строку. Чтобы наилучшим образом сохранить существующий код, я просто добавил ваше регулярное выражение замены строки запятой в reduce
:
const data = ["195,918", "171,749", "167,076", "116,486"]
let topArr = data.map(e => Number(e.replace(/(,\s*)+/g, '').trim()))
.sort((a, b) => {
return b - a
})
.slice(0, 4)
.map((item) => {
return String(item).replace(/(.)(?=(\d{3})+$)/g, '$1,')
});
let sum = topArr.reduce((a, b) => a + Number(b.replace(/(,\s*)+/g, '').trim()), 0);
console.log(topArr);
console.log(sum);
Однако это решение более эффективно, так как оно удаляет обратное преобразование в строку в конце topArr
:
const data = ["195,918", "171,749", "167,076", "116,486"]
let topArr = data.map(e => Number(e.replace(/(,\s*)+/g, '').trim()))
.sort((a, b) => {
return b - a
});
let sum = topArr.reduce((a, b) => a + b, 0);
console.log(topArr);
console.log(sum);
Как видите, оба они производят одинаковый (правильный) результат.