@sincopa

Как объединить уникальные значения в массиве объектов?

Пытаюсь сделать миксин в PUG

- var data =
[
    {
        "title": "Артем"
    },
    {
        "title": "Аня"
    },
    {
        "title": "Виталик"
    },
    {
        "title": "Гена"
    },
    {
        "title": "Дима"
    },
    {
        "title": "Вася"
    },
    {
        "title": "Гриша"
    },
    {
        "title": "Андрей"
    }
]

mixin sort(data)
	- var sort = data.sort(function(a, b) {return a.title.localeCompare(b.title);}); // сортируем по алфавиту
	each item in sort
		.div= title.charAt(0)


В итоге получаю
А
А
А
В
В
Г
Г
Д


Как мне объединить повторяющиеся буквы, и далее вывести имена, что бы получит такое
А
Артем
Аня
В
Виталик
Вася
Г
Гена
Гриша
и т.д.
  • Вопрос задан
  • 109 просмотров
Решения вопроса 2
0xD34F
@0xD34F
- var data = [ { "title": "Артем" }, { "title": "Аня" }, { "title": "Виталик" }, { "title": "Гена" }, { "title": "Дима" }, { "title": "Вася" }, { "title": "Гриша" }, { "title": "Андрей" } ]

mixin sort(data)
  - var grouped = data.reduce((acc, n) => {
  -   var name = n.title[0];
  -   acc[name] = acc[name] || [];
  -   acc[name].push(n);
  -   return acc;
  - }, {});
  each group, name in grouped
    div
      h3= name
      each obj in group
        div= obj.title

div
  +sort(data)
Ответ написан
Vlad_IT
@Vlad_IT
Front-end разработчик
Можно создать категории А, Б, В и.т.д., в которых будет массив имен.
var cats = {};
var sort = data.sort(function(a, b) {return a.title.localeCompare(b.title);})
sort.forEach(function(val) { 
   (cats[val.title[0]] = cats[val.title[0]] || []).push(val); 
});

На выходе получим объект, у которого ключом будет буква в верхнем регистре, а значением будет массив объектов {title: "Имя"}

UPD: на pug будет как-то так

each item, letter in cats 
    h4=letter 
    each user in item
        span=item.title
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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