Задать вопрос
Sedbol
@Sedbol

Как сгруппировать элементы массива по значению одного из свойств?

Как сгруппировать массив по значению room?
const arr= [
     {name:"Вася",room:"1000"},
     {name:"Лена",room:"1000"},
     {name:"Катя",room:"1001"},
     {name:"Дима",room:"1001"},
     {name:"Коля",room:"1000"}
     ]

Как получить массивы со значением room 1000, 1001 и так далее? Входной массив может быть очень большим, как правильно это сделать?
  • Вопрос задан
  • 210 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Вот метод группировки (не только массивов, но и любых итерируемых объектов):

function group(data, key, val = n => n) {
  const getKey = key instanceof Function ? key : n => n[key];
  const getVal = val instanceof Function ? val : n => n[val];
  const grouped = {};

  for (const n of data) {
    const k = getKey(n);
    (grouped[k] = grouped[k] || []).push(getVal(n));
  }

  return grouped;
}

Как использовать в вашем случае:

group(arr, 'room')
// или
group(arr, n => n.room)

Но можно и так:

group(Array(5).keys(), n => n % 2 ? 'нечётные' : 'чётные')

Или так:

group('a8-C!39', n => (
  n.toLowerCase() !== n.toUpperCase() ? 'буква' :
  !Number.isNaN(+n)                   ? 'цифра' :
                                        'другое'
))

Или вот ещё вариант:

<input name="xxx" value="69">
<input name="xxx" value="187">
<input name="xxx" value="666">
<input name="yyy" value="-1">

group(document.querySelectorAll('input'), 'name', n => +n.value)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
Рекомендую ознакомится, полезно и интересно:
https://habr.com/ru/company/ruvds/blog/480354/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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