@iliya2004
Верстальщик, программист, дизайнер

Как сгруппировать 2 массива?

Есть 2 массива:
name= ["Интернет", "Интернет", "Интернет", "Развлечения", "Развлечения", "Роуминг", "Роуминг", "Роуминг", "Сообщения"];
price = ["800", "700", "2", "50", "145", "450", "700", "600", "60"];

В каждом по 9 элементов. Нужно удалить повторяющиеся категории и сложить цены. Категории всегда идут по порядку.

Например:
name= ["Интернет", "Интернет", "Сообщения", "Развлечения", "Развлечения"];
price = ["100", "100", "999"," 500", "500"];


должно получиться 2 массива
nameNew= ["Интернет", "Сообщения", "Развлечения"];
priceNew = ["200", "999", "1000"];
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
Собираете все в объект, попутно складывая цены, а потом из него получаете массив ключей и массив значений

const obj = name.reduce((agg, v, ind) => {
  agg[v] = (agg[v] || 0) + price[ind]
  return agg
}, {})

const nameNew = Object.keys(obj)
const priceNew = Object.values(obj)


или слабочитаемый, но зато однострочный вариант с lodash

const [nameNew, priceNew] = 
  _.unzip(
    _.toPairs(
      _.groupBy(
        _.zip(name, price).map(([name, price]) => ({ name, price })), 
        'name'
      )
    ).map(([name, prices]) => [name, _.sumBy(prices, 'price')])
  )
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы