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