Вы можете построить карту (используя .reduce()
), которая индексируется / кодируется значением teacher
. Значение, хранящееся у учителя, представляет собой количество раз, которое учитель видел в вашем массиве объектов. Затем вы можете использовать Array.from()
с Map
, построенным с использованием Reduce, чтобы получить каждую пару ключ-значение с карты (где ключ - имя учителя, а значение - значение учителя). Чтобы получить каждую пару ключ-значение, вы можете использовать функцию отображения Array.from () и сопоставить каждое значение ключа ([ключ, значение]) с таким объектом:
const data = [{ "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher2", "student": "student1" }, { "teacher": "teacher2", "student": "student2" } ];
const res = Array.from(data.reduce((map, {teacher}) => {
return map.set(teacher, (map.get(teacher) || 0) + 1);
}, new Map), ([teacherName, teacherCount]) => ({teacherName, teacherCount}));
console.log(res);