#javascript #arrays #sorting
#javascript #массивы #сортировка
Вопрос:
В настоящее время я сопоставляю через и массив, а затем делаю вторую карту, чтобы попытаться удалить ненужные объекты из второго массива.
const activities = self.periods.map(period => {
period.activities.map(activity => {
let showActivity = false
if(activity.teacher_id === teacherId){
showActivity = true
}
else if(activity.substitute){
if(
activity.substitute.type === 'tutor' amp;amp;
activity.substitute.id == tutorId
){
showActivity = true
}
else if(
activity.substitute.type === 'teacher' amp;amp;
activity.substitute.id == teacherId
){
showActivity = true
}
}
if(showActivity){
return activity
}
else{
return null
}
})
return period
})
В настоящее время кажется, что он просто возвращает массив периодов точно таким, какой он есть, несмотря на то, что оператор if, который возвращает null, срабатывает.
Комментарии:
1. Похоже, вы хотите
.filter()
вместо этого здесь. Я не уверен, что дает вам операция сопоставления. Такжеperiod.activities.map()
(илиperiod.activities.filter()
) создаст новый массив, не изменяющийсяperiod.activities
на месте.2. Вероятно, вы можете упростить все это следующим образом: jsfiddle.net/L9t3xq0f/1
3. @adiga я даже не уверен
period
, что объект нужно воссоздавать. Он назначенactiviries
, поэтому, возможно, flatMap в фильтре достаточно jsfiddle.net/3249mdbv (Надеюсь, я не перепутал скобки)
Ответ №1:
Array.map
возвращает массив той же длины, что и исходный массив. Вы должны использовать Array.forEach
.
const activities = []
self.periods.forEach(period => {
...
if (...) {
activities.push(period)
}
})