СЛУЧАЙ: мы хотим реорганизовать массив JSON, т.е. отсортировать элементы массива по группам.

Предположим следующее:

  1. Вы создали массив.
  2. В этом массиве есть вся необходимая информация.
  3. Однако вы забыли сгруппировать информацию.

Другими словами, у вас получается что-то вроде этого:

Но вам нужно что-то вроде этого:

Как это может быть сделано?

Это можно сделать с помощью комбинации 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 год и 🕸️ Изучите веб-разработку с полным стеком .