Как сохранить значение массива даже после фильтрации с использованием es6

#reactjs #ecmascript-6

#reactjs #ecmascript-6

Вопрос:

Я фильтрую многомерный массив. После успешного фильтрации исходное значение массива изменяется. Пожалуйста, найдите метод массива и фильтра, который я использую

 const rDetailsList = [  
        {  
            "rDate":"April 01, 2018",
            "rList":[  
                {  
                    "aName":"GOKQG C HQFUDHFPX",
                    "aNumber":"P3799838628"
                },
                {  
                    "aName":"IGNDPJR D EKYJYC",
                    "aNumber":"P3899820579"
                }
            ]
        },
        {  
            "rDate":"Jan 01, 2018",
            "rList":[  
                {  
                    "aName":"",
                    "aNumber":"A39A4035073"
                },
                {  
                    "aName":"YVTLW K SIGLC",
                    "aNumber":"A270M040558"
                }
            ]
        }
    ];

const myFilter = (arr, num) => {
  const rDetails = arr.filter(det => !!det.rList.find(l => l.aNumber === num));
  
  return rDetails.map(det => {
    det.rList = det.rList.filter(l => l.aNumber === num);
    return det;
  });
          
};
  

Когда я это делаю console.log(myFilter(rDetailsList, 'A270M040558')) , я получаю ожидаемый результат, как показано ниже

  [{  
        "rDate":"Jan 01, 2018",
        "rList":[  
            {  
                "aName":"YVTLW K SIGLC",
                "aNumber":"A270M040558"
            }
        ]
    }]
  

Но когда я это делаю console.log(rDetailsList) , я получаю результат ниже

 const rDetailsList = [  
        {  
            "rDate":"April 01, 2018",
            "rList":[  
                {  
                    "aName":"GOKQG C HQFUDHFPX",
                    "aNumber":"P3799838628"
                },
                {  
                    "aName":"IGNDPJR D EKYJYC",
                    "aNumber":"P3899820579"
                }
            ]
        },
        {  
            "rDate":"Jan 01, 2018",
            "rList":[ 
                {  
                    "aName":"YVTLW K SIGLC",
                    "aNumber":"A270M040558"
                }
            ]
        }
    ];
  

Кто-нибудь, пожалуйста, помогите, почему один из объектов удален "rDate":"Jan 01, 2018". , и требуется решение, чтобы исправить это.

Комментарии:

1. Здесь вы изменяете свой объект / массив: det.rList = det.rList.filter(l => l.aNumber === num);

2. да, тогда без этого, как я могу получить ожидаемый результат отфильтрованного значения, пожалуйста, помогите

Ответ №1:

Вместо

 return rDetails.map(det => {
  det.rList = det.rList.filter(l => l.aNumber === num);
  return det;
});  

выполните

 return rDetails.map(det => {
  return {
    ...det,
    rList: det.rList.filter(l => l.aNumber === num)
  }
});