@Russlik

Как решить задачу с объектом?

Нашёл вот такую задачу, как её можно решить?

Онлайн шопинг с каждым днем набирает обороты. Само собой Mate Shop и здесь старается занять свою нишу. Наши роботы круглосуточно принимают звонки людей со всего мира, обрабатывают их и формируют заказ. Мы user friendly, поэтому авторизованные пользователи теперь имеют возможность просто прислать SMS в виде строки с количеством и типом продуктов, а наши роботы обучены читать и понимать эти SMS. Должны быть обучены... Давай напишем функцию makeOrderList, которая будет принимать строку order, и возвращать объект где ключом будет продукт. А значение ключа - это количество заказанного продукта в числовом виде. Каждый элемент в order всегда начинается с количества продукта.

Если название продукта состоит более чем из одного слова - соедини слова в формате snake_case. Для пустой строки функция должна возвращать пустой объект.

Пример:

makeOrderList('1 coca cola, 5 chicken nuggets, 20 egg') // {coca_cola: 1, chicken_nuggets: 5, egg: 20}
  • Вопрос задан
  • 124 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const makeOrderList = str =>
  Object.fromEntries(Array
    .from(str.matchAll(/(\d+) ([^,]+)/g))
    .map(n => [ n[2].replace(/ /g, '_'), +n[1] ])
  );

или

const makeOrderList = str => str
  .split(', ')
  .map(n => [ n.split(' ').slice(1).join('_'), parseInt(n) ])
  .filter(n => !Number.isNaN(n[1]))
  .reduce((acc, n) => (acc[n[0]] = n[1], acc), {});
Ответ написан
Poznakomlus
@Poznakomlus
Программист: php, js, go
const makeOrderList = str => {
  const res = {}
  str.replace(/(\d+)\s+(.[^\,]*)/g, (_, b, c) => {
    res[c.replace(/\s/g, '_')] = +b
  })
  return res
}

console.log(makeOrderList('1 coca cola, 5 chicken nuggets, 20 egg'))
//{ coca_cola: 1, chicken_nuggets: 5, egg: 20 }

вариант решения для целых чисел
const makeOrderList = str => {
  const res = {}
  str.replace(/(\d*\.?\d+)\s+(.[^\,]*)/g, (_, b, c) => {
    res[c.replace(/\s/g, '_')] = +b
  })
  return res
}

console.log(makeOrderList('1.5 coca cola, 3.5 chicken nuggets, 20 egg'))
//{ coca_cola: 1.5, chicken_nuggets: 3.5, egg: 20 }

вариант решения дробных чисел
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
Artezio Москва
от 160 000 до 220 000 ₽
04 дек. 2020, в 16:45
50000 руб./за проект
04 дек. 2020, в 16:41
1 руб./за проект
04 дек. 2020, в 16:29
80000 руб./за проект