Я хочу проверить наличие свойства объекта, которое находится внутри массива, чтобы я мог собрать список уникальных 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
, когда я хочу, чтобы он продолжал увеличиваться. Как я могу добиться такого поведения?
Думаю, я просто закрою вопрос здесь, так как я сделал глупую небольшую ошибку, используя findIndex()
на list
вместо temp
.
const idx = list.findIndex((room) => {
return room.classroom === list[i].classroom;
});
Исправлена выдержка.
const idx = temp.findIndex(room => room.classroom === list[i].classroom);
Работает на меня? jsbin.com/sicesadipu/edit?js,консоль