javascript - Destrukturering av nestet objekt es6
Hvordan har du det? Jeg vil gjerne fjerne en egenskap ("isCorrect") fra et nestet objekt.
Opprinnelig liste
id: 1,
questionText: 'This is a test question for tests',
answerOptions: [
{
answerText: 'A',
isCorrect: true
},
{
answerText: 'B',
isCorrect: false
}
],
difficulty: 1
},
{
id: 2,
questionText: 'This is another test question for tests',
answerOptions: [
{
answerText: 'A',
isCorrect: false
},
{
answerText: 'B',
isCorrect: true
}
],
difficulty: 2
}
Forventet resultat
id: 1,
questionText: 'This is a test question for tests',
answerOptions: [
{
answerText: 'A'
},
{
answerText: 'B'
}
],
difficulty: 1
},
{
id: 2,
questionText: 'This is another test question for tests',
answerOptions: [
{
answerText: 'A'
},
{
answerText: 'B'
}
],
difficulty: 2
}
Jeg klarte det ved å bruke slettekoden nedenfor, men det er ikke den beste tilnærmingen
const cleanResponses = (questions: Question[]): Question[] => {
questions.forEach(question => {
question.answerOptions.forEach((answer) => {
delete answer.isCorrect
});
})
return questions;
}
Prøvde linjen under, men ingen suksess :(
const {{ answerOptions: [{ isCorrect }], ...rest }}=question
Takk
Svar #1
Bruke Array#map:
const arr = [
{ id: 1,
questionText: 'This is a test question for tests',
answerOptions: [ { answerText: 'A', isCorrect: true }, { answerText: 'B', isCorrect: false } ],
difficulty: 1
},
{
id: 2,
questionText: 'This is another test question for tests',
answerOptions: [ { answerText: 'A', isCorrect: false }, { answerText: 'B', isCorrect: true } ],
difficulty: 2
}
];
const res = arr.map(({ answerOptions = [], ...elem }) => ({
...elem,
answerOptions: answerOptions.map(({ isCorrect, ...answer }) => answer)
}));
console.log(res);Svar #2
Det avhenger av om du vil endre det eksisterende arrayet, eller lage et nytt array. Hvis det er det første, er koden din fin (jeg har gitt en oppdatert versjon nedenfor). Hvis det er det siste, har Majed Badawi gitt et godt svar ved å bruke map. Uansett, vil du måtte iterere over både objektene i data-arrayet og objektene i answerOptions-arrayet for å få resultatet du trenger.
const arr=[{id:1,questionText:"This is a test question for tests",answerOptions:[{answerText:"A",isCorrect:!0},{answerText:"B",isCorrect:!1}],difficulty:1},{id:2,questionText:"This is another test question for tests",answerOptions:[{answerText:"A",isCorrect:!1},{answerText:"B",isCorrect:!0}],difficulty:2}];
for (let { answerOptions } of arr) {
for (let obj of answerOptions) {
delete obj.isCorrect;
}
}
console.log(arr);