@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}
  • Вопрос задан
  • 578 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const makeOrderList = str =>
  Object.fromEntries(Array.from(
    str.matchAll(/(\d+) ([^,]+)/g),
    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), {});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы