¿como estas? Me gustaría eliminar una propiedad ("isCorrect") de un objeto anidado.
Lista original
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 }Resultado Esperado
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 }Logré usar el código de eliminación a continuación, pero ese no es el mejor enfoque
const cleanResponses = (questions: Question[]): Question[] => { questions.forEach(question => { question.answerOptions.forEach((answer) => { delete answer.isCorrect }); }) return questions; }Intenté la siguiente línea pero no tuve éxito :(
const { opciones de respuesta: [{ isCorrect }], ... resto } = pregunta
Gracias
Usando 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);Depende si desea mutar la matriz existente o crear una nueva matriz. Si es el primero, su código está bien (proporcioné una versión actualizada a continuación). Si es lo último, Majed Badawi ha proporcionado una buena respuesta usando map . De cualquier manera, estará iterando sobre los objetos en la matriz de datos y los objetos en la matriz de answerOptions de respuesta para obtener el resultado que necesita.
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);Aquí hay otra forma (más larga) de lograr el resultado deseado. Trabajando de afuera hacia adentro, primero mapeamos todos los objetos en la test de matriz. Uso el operador de descanso para separar la matriz de objetos answerOptions de las otras propiedades de la pregunta. A continuación, debemos answerOptions la matriz de opciones de respuesta. Con el operador rest, cree un nuevo objeto answerOption que no contenga la propiedad isCorrect . Finalmente, lo volvemos a juntar todo. Devuelve un objeto que contiene las propiedades de pregunta separadas y los nuevos objetos answerOptions sin isCorrect .
const test = [ { 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 cleanResponses = (questions) => { return questions.map(({ answerOptions, ...rest }) => { const newAnswerOptions = answerOptions.map((answerOption) => { const { isCorrect, ...newAnswerOption } = answerOption; return newAnswerOption; }); return { answerOptions: { ...newAnswerOptions }, ...rest }; }); }; console.log(cleanResponses(test))