СЛУЧАЙ: мы хотим реорганизовать массив JSON, т.е. отсортировать элементы массива по группам.
Предположим следующее:
- Вы создали массив.
- В этом массиве есть вся необходимая информация.
- Однако вы забыли сгруппировать информацию.
Другими словами, у вас получается что-то вроде этого:
Но вам нужно что-то вроде этого:
Как это может быть сделано?
Это можно сделать с помощью комбинации 4 функций:
1. groupBy
2. mapValues
3. карта
4. опустить
groupBy, mapValues и omit доступны в js-библиотеке lodash.
1. Группировка массива игроков:
_.groupBy(players, "team");
Это применяет функцию lodash groupBy к массиву Players с помощью свойства team.
Кавычки важны
Вот еще один способ взглянуть на эту функцию:
const Array = players; const Property = "team"; const playersByTeam = _.groupBy(Array, Property);
Независимо от того, какой способ вы выберете, результатом будет:
Это может выглядеть хорошо, но наша проблема в том, что необходимость в свойстве team отпала, поэтому свойство team во вновь созданном объекте это пустая трата места.
В большом приложении сохранение свойства team привело бы к потере много места и заполнению приложения данными, которые стали неактуальными.
2. Сопоставление значений
Ниже приводится пример того, как мы можем использовать _.mapValues
_.mapValues(playersByTeam, x => "foo");
Это получит каждый объект в playerByTeam и изменит его на «foo»
В нашем случае мы не хотим менять его на «foo», мы хотим изменить его на объект , не содержащий свойства team.
3. Карта
_.mapValues(playersByTeam, x => x.map(y => "bar"));
Если мы запустим это в консоли, мы увидим:
Это означает, что мы можем создать объект {} на основе playerByTeam и изменить массив [] в объекте.
4. Опустить
Функция _.omit создает объект без определенного свойства, в нашем случае это свойство team.
_.mapValues(playersByTeam, x => x.map(y => _.omit(y, 'team') ));
Это консольная версия:
В заключение,
чтобы создать реорганизованный массив без необходимого свойства team
_.mapValues(_.groupBy(players, "team"), x => x.map(y => _.omit(y, "team") ));
Спасибо
✉️ Подпишитесь на рассылку еженедельно Email Blast 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ План развития веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .