Вернуть сумму значений в объекте
Есть объект:
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, время: 21:31. |