Javascript: проверка на соответствие свойств, функция стрелки не будет обновлять я в течение цикла - PullRequest
0 голосов
/ 10 апреля 2019

Я хочу проверить наличие свойства объекта, которое находится внутри массива, чтобы я мог собрать список уникальных room s со списком time s (пара строк в данном случае). Я не нашел краткого способа моделирования этой процедуры вне тривиальных массивов чисел.

Я попытался перебрать список, чтобы проверить, содержит ли список, в который я вставляю, уже соответствующее поле класса, к сожалению, переменная i не будет обновляться в функции, которую я передал в findIndex()

const getClassroomList = (list) => {
  const temp = [{
    classroom: '',
    times: [{
      start_time: '',
      end_time: '',
    }],
  }];
  // For every classroom in list, check if classroom already exists.
  // If it does, add object to array
  // Else add pair of times to existing classroom
  for (let i = 0; i < list.length; i += 1) {
    const idx = list.findIndex((room) => {
      // console.log(i); Here the variable i won't update so the below fails
      return room.classroom === list[i].classroom;
    });
    if (idx === -1) {
      temp.push({
        classroom: list[i].classroom,
        times: [{
          start_time: list[i].start_time,
          end_time: list[i].end_time,
        }],
      });
    } else {
      temp[idx].times.push({
        start_time: list[i].start_time,
        end_time: list[i].end_time,
      });
    }
  }
  return temp;
};

Кажется, что функция инициализирует себя первым экземпляром i, который она видит и сохраняет на 0, когда я хочу, чтобы она продолжала увеличиваться. Как мне добиться этого поведения?

1 Ответ

0 голосов
/ 10 апреля 2019

Полагаю, я просто закрою вопрос здесь, поскольку сделал маленькую глупую ошибку, используя findIndex() на list вместо temp.

const idx = list.findIndex((room) => {
  return room.classroom === list[i].classroom;
});

Исправлена ​​выдержка.

const idx = temp.findIndex(room => room.classroom === list[i].classroom);
...