Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.06.2022, 10:33
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

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

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]. Можно ли?
Ответить с цитированием
  #2 (permalink)  
Старый 07.06.2022, 10:48
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,235

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

Обозначение валюты вообще лучше выводить в отдельный ключ...
Сумма должна быть суммой.
Ответить с цитированием
  #3 (permalink)  
Старый 07.06.2022, 10:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,235

Сообщение от 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)
Ответить с цитированием
  #4 (permalink)  
Старый 07.06.2022, 10:54
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

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

Обозначение валюты вообще лучше выводить в отдельный ключ...
Сумма должна быть суммой.
Ну здесь суть такая что принимаю данные уже в таком фармате и надо исходить от этого
Ответить с цитированием
  #5 (permalink)  
Старый 07.06.2022, 10:55
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,235

NovichokJS, я свой вариант показал выше...
Ответить с цитированием
  #6 (permalink)  
Старый 07.06.2022, 10:55
Профессор
Отправить личное сообщение для NovichokJS Посмотреть профиль Найти все сообщения от NovichokJS
 
Регистрация: 25.04.2022
Сообщений: 159

Сообщение от ksa Посмотреть сообщение
Например так...
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)
а без регулярки можно обойтись?
Ответить с цитированием
  #7 (permalink)  
Старый 07.06.2022, 11:14
Аспирант
Отправить личное сообщение для Дмитрий Луценко Посмотреть профиль Найти все сообщения от Дмитрий Луценко
 
Регистрация: 24.05.2022
Сообщений: 36

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

Последний раз редактировалось Дмитрий Луценко, 07.06.2022 в 11:14. Причина: -
Ответить с цитированием
  #8 (permalink)  
Старый 07.06.2022, 11:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,235

Сообщение от NovichokJS
а без регулярки можно обойтись?
Для этого нужно понимать где будут символы валюты...
Поняв где они - просто "вырезать" циферки, перевести их в число.
Ответить с цитированием
  #9 (permalink)  
Старый 07.06.2022, 11:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,235

Сообщение от Дмитрий Луценко
2-й способ: читать все символы, если символ не число, то отбраковывать
Ну это вовсе не эффективно.
Ответить с цитированием
  #10 (permalink)  
Старый 07.06.2022, 11:21
Аспирант
Отправить личное сообщение для Дмитрий Луценко Посмотреть профиль Найти все сообщения от Дмитрий Луценко
 
Регистрация: 24.05.2022
Сообщений: 36

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести сумму всех значений все выбранных ячеек loia jQuery 5 13.11.2019 16:01
Вычислить сумму массивов и вернуть сумму в квадрате Ksenia1970 Общие вопросы Javascript 5 04.07.2019 13:21
Значения input добавить в массив и вывести сумму значений в другой input Eugen Chetverov Общие вопросы Javascript 3 09.06.2019 18:25
Как вернуть несколько значений из рекурсивной функции? Tipylja Node.JS 1 27.08.2018 16:58
посчитать сумму значений Abraham jQuery 37 19.06.2011 00:07