Вернуть сумму значений в объекте
Есть объект:
const objCars = { 'reno': '$15000', 'audi': '$20000', 'bmw': '$30000', 'peogeot': '18000$' } Мне нужно получить сумму всех цен на авто. Решил таким образом: const sumOfPrice = obj => { let sum = 0; for (let key in obj) { let str = obj[key].replace(/\D+/g, ''); sum += Number(str); } return sum; } Но мне кажется что можно было проще решить. Пытался применить методы превращения строки в число, однако, например Number.parseInt() не отбросил лишние символы с obj[key]. Можно ли? |
NovichokJS, знак доллара у тебя будет в разных местах?
Обозначение валюты вообще лучше выводить в отдельный ключ... Сумма должна быть суммой. |
Цитата:
const obj = { 'reno': '$15000', 'audi': '$20000', 'bmw': '$30000', 'peogeot': '18000$' } const s = Object.values(obj).reduce((val, el) => val += +el.match(/\d+/)[0], 0) alert(s) |
Цитата:
|
NovichokJS, я свой вариант показал выше... ;)
|
Цитата:
|
Цитата:
2-й способ: читать все символы, если символ не число, то отбраковывать. |
Цитата:
Поняв где они - просто "вырезать" циферки, перевести их в число. |
Цитата:
|
Цитата:
|
Дмитрий Луценко, как вариант...
const obj = { 'reno': '$15000', 'audi': '$20000', 'bmw': '$30000', 'peogeot': '18000$' } const s = Object.values(obj).reduce((val, el) => val += value(el), 0) alert(s) // Вернет число function value(str) { const i = str.indexOf('$') if (i === -1) return +str return +(i ? str.substring(0, i) : str.substring(1)) } |
ок, спасибо ребята!
|
:) :write:
<script src="https://cdnjs.cloudflare.com/ajax/libs/collect.js/4.34.0/collect.min.js"></script> <script> const objCars = { 'reno': '$15000', 'audi': '$20000', 'bmw': '$30000', 'peogeot': '18000$' } const total = collect(objCars).sum(value => value.replace(/\D+/g, '')); alert(total); </script> |
Цитата:
|
Часовой пояс GMT +3, время: 05:46. |