Javascript: проверка соответствия свойств, функция стрелки не обновит i в цикле for

#javascript #for-loop #arrow-functions

#javascript #для цикла #функции со стрелками

Вопрос:

Я хочу проверить наличие свойства объекта, которое находится внутри массива, чтобы я мог собрать список уникальных 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. Работает для меня? jsbin.com/sicesadipu/edit?js ,консоль

Ответ №1:

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

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

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

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