@Danoneko

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

Есть массив объектов (задач):

[
{
   "id": "0", 
   "id_cource": "2", 
   "name": "Задача", 
   "teacher": [
      {"id": "6"}],
   "student": [
      {"id":"2"},
      {"id": "0"}
   ],
},
{
   "id": "1", 
   "id_cource": "2", 
   "name": "Задача", 
   "teacher": [
      {"id": "6"},
      {"id": "4"},
      {"id": "0"}],
   "student": [
      {"id":"0"}
   ],
},
...etc
]

Я сделал поиск по всем объектам (задачам) в этом массиве, которые принадлежат конкретному курсу по id_cource. Т.е к курсу с id=2 принадлежат первые две задачи. Допустим, эта переменная tasksCourse и в нашем примере выглядеть она будет так - (2) [{...}, {...}].

Теперь из выбранных задач, которые хранятся в переменной tasksCourse, необходимо забрать значения ключа teacher, и записать в один массив объектов без дубликатов. Т.е, условно, чтобы в константе const teacherTaskCource = []; содержалось (3) [ {"id": "6"},{"id": "4"},{"id": "0"}].

И такой же массив студентов const studentTaskCource = []; который (2) [ {"id": "2"},{"id": "0"}].

Код вроде этого
tasksCourse.filter((i) =>  teacherTaskCource.push(i.teachers))

Проводил к тому, что я получаю массив массивов с объектами (2) [Array(1), Array(2)].
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
@Danoneko Автор вопроса
В общем удаление дубликатов нашел такое
users.filter(
      // удаляем дубликаты
      (thing, index, self) => index === self.findIndex((t) => t.id === thing.id)
    );
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@wonderingpeanut
Ну например так

// объект который будет хранить айдишники учителей
const freq = {}
// финальный массив
const res = [];
for (const el of tasks.teacher) {
  // для каждого учителя смотрим, уникальный ли он
  // если учитель есть в объекте freq, значит не уникальный, едем дальше
  if (el.id in freq) continue;
  // в противном случае записываем айди учителя в объект и пушим объект учителя в результирующий массив
  freq[el.id] = 1;
  res.push(el);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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