#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);