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

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

Я попытался просмотреть список, чтобы проверить, содержит ли список, в который я вставлял, уже соответствующее поле класса, к сожалению, переменная 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.info(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, когда я хочу, чтобы он продолжал увеличиваться. Как я могу добиться такого поведения?

Работает на меня? jsbin.com/sicesadipu/edit?js,консоль

pizzarob 10.04.2019 00:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
18
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Другие вопросы по теме