You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ES6嵌套对象解构移除嵌套对象中的isCorrect属性

您好,我想要从嵌套对象中移除指定属性isCorrect,具体情况如下:

原始数据列表

{
  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
}

期望得到的结果

{
  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
}

我目前通过如下delete方法实现了需求,但该方案并非最优解:

const cleanResponses = (questions: Question[]): Question[] => {
  questions.forEach(question => {
    question.answerOptions.forEach((answer) => {
      delete answer.isCorrect
    });
  })

  return questions;
}

我尝试使用下面这行嵌套解构的写法实现需求,但没有成功:
const { answerOptions: [{ isCorrect }], ...rest } = question
请问正确的实现方式是什么?谢谢。


解决方案

你之前的解构写法仅能提取answerOptions数组第一个元素的isCorrect属性,无法批量处理数组内所有答案对象,因此无法达到预期效果。

推荐使用无副作用的不可变方案实现,不会修改原始输入数据,避免可变操作带来的潜在数据污染问题,也是社区普遍认可的最优实现:

const cleanResponses = (questions: Question[]): Question[] => {
  return questions.map(question => {
    // 遍历处理所有答案,移除isCorrect属性
    const cleanedAnswers = question.answerOptions.map(({ isCorrect, ...restAnswer }) => restAnswer)
    // 返回新的问题对象,不修改原对象
    return {
      ...question,
      answerOptions: cleanedAnswers
    }
  })
}

如果业务场景确实需要修改原对象,可在原有delete方案基础上补充属性存在性判断避免报错,但优先推荐上述不可变方案,更适配React、Vue等框架的状态更新逻辑。


内容的提问来源于stack exchange,提问作者Alexandre Bonfim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:18:03