Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вернуть сумму значений в объекте (https://javascript.ru/forum/misc/84125-vernut-summu-znachenijj-v-obekte.html)

NovichokJS 07.06.2022 10:33

Вернуть сумму значений в объекте
 
Есть объект:

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]. Можно ли?

ksa 07.06.2022 10:48

NovichokJS, знак доллара у тебя будет в разных местах?

Обозначение валюты вообще лучше выводить в отдельный ключ...
Сумма должна быть суммой.

ksa 07.06.2022 10:53

Цитата:

Сообщение от 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 07.06.2022 10:54

Цитата:

Сообщение от ksa (Сообщение 545983)
NovichokJS, знак доллара у тебя будет в разных местах?

Обозначение валюты вообще лучше выводить в отдельный ключ...
Сумма должна быть суммой.

Ну здесь суть такая что принимаю данные уже в таком фармате и надо исходить от этого

ksa 07.06.2022 10:55

NovichokJS, я свой вариант показал выше... ;)

NovichokJS 07.06.2022 10:55

Цитата:

Сообщение от ksa (Сообщение 545984)
Например так...
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)

а без регулярки можно обойтись?

Дмитрий Луценко 07.06.2022 11:14

Цитата:

Сообщение от NovichokJS (Сообщение 545987)
а без регулярки можно обойтись?

Я думаю, это надо заморачиваться с parseInt() - сработает только в случае 1000$.
2-й способ: читать все символы, если символ не число, то отбраковывать.

ksa 07.06.2022 11:15

Цитата:

Сообщение от NovichokJS
а без регулярки можно обойтись?

Для этого нужно понимать где будут символы валюты...
Поняв где они - просто "вырезать" циферки, перевести их в число.

ksa 07.06.2022 11:16

Цитата:

Сообщение от Дмитрий Луценко
2-й способ: читать все символы, если символ не число, то отбраковывать

Ну это вовсе не эффективно. :nono:

Дмитрий Луценко 07.06.2022 11:21

Цитата:

Сообщение от ksa (Сообщение 545990)
Ну это вовсе не эффективно. :nono:

Конечно не оптимизированно) Тем более, есть необходимые для этого функции и способы) Слайсинг, к примеру)


Часовой пояс GMT +3, время: 21:39.