Карта внутри карты, не изменяющая исходный массив

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