如何在不遍历主数组的情况下移除嵌套结构中的isCorrect属性
需求描述
我有一个包含对象的数组,希望在不手动遍历主数组且不将属性值改为false的前提下,移除所有键为"isCorrect"的属性。
示例数组
[ { "arrangement": 1, "question": "mijn", "answers": [ { "answer": "nmiou", "isCorrect": true }, { "answer": "nkj", "isCorrect": false }, { "answer": "nk", "isCorrect": false }, { "answer": "jln", "isCorrect": false } ] }, { "arrangement": 2, "question": "kjn", "answers": [ { "answer": "kjn", "isCorrect": true }, { "answer": "kj", "isCorrect": false }, { "answer": "nkj", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 3, "question": "jn", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "nn", "isCorrect": false } ] }, { "arrangement": 4, "question": "n", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 5, "question": "n", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 6, "question": "nn", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 7, "question": "n", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 8, "question": "n", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "nkokj", "isCorrect": false }, { "answer": "nj", "isCorrect": false }, { "answer": "nkj", "isCorrect": false } ] }, { "arrangement": 9, "question": "n", "answers": [ { "answer": "njk", "isCorrect": true }, { "answer": "nkjn", "isCorrect": false }, { "answer": "jk", "isCorrect": false }, { "answer": "nkj", "isCorrect": false } ] }, { "arrangement": 10, "question": "i", "answers": [ { "answer": "i", "isCorrect": true }, { "answer": "ii", "isCorrect": false }, { "answer": "i", "isCorrect": false }, { "answer": "i", "isCorrect": false } ] } ]
补充说明
用手动循环可以实现需求,但会消耗额外的时间与性能。以下是仅修改属性值的示例代码(非目标实现):
let primaryArray = [ { "arrangement": 3, "question": "jn", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "nn", "isCorrect": false } ] }, { "arrangement": 4, "question": "n", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 5, "question": "n", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 6, "question": "nn", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 7, "question": "n", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false }, { "answer": "n", "isCorrect": false } ] }, { "arrangement": 8, "question": "n", "answers": [ { "answer": "n", "isCorrect": true }, { "answer": "nkokj", "isCorrect": false }, { "answer": "nj", "isCorrect": false }, { "answer": "nkj", "isCorrect": false } ] }, { "arrangement": 9, "question": "n", "answers": [ { "answer": "njk", "isCorrect": true }, { "answer": "nkjn", "isCorrect": false }, { "answer": "jk", "isCorrect": false }, { "answer": "nkj", "isCorrect": false } ] }, { "arrangement": 10, "question": "i", "answers": [ { "answer": "i", "isCorrect": true }, { "answer": "ii", "isCorrect": false }, { "answer": "i", "isCorrect": false }, { "answer": "i", "isCorrect": false } ] } ] primaryArray.map((q)=>{ q.answers[0].isCorrect = false; }) console.log(primaryArray)
解决方案
完全避免遍历是不现实的,但可以利用原生API的高效实现替代手动循环,既满足“不手动遍历主数组”的要求,又能高效移除目标属性。
方法1:利用JSON.stringify的替换器参数
通过JSON.stringify的replacer函数过滤掉isCorrect属性,再将字符串转回对象。原生JSON处理由引擎底层实现,性能通常优于手动循环:
const processedArray = JSON.parse(JSON.stringify(primaryArray, (key, value) => { if (key === 'isCorrect') return undefined; return value; })); console.log(processedArray);
说明:
- 该方法会创建原数组的深拷贝,不会修改原数组
- 无需手动编写循环逻辑,代码简洁
方法2:使用数组高阶方法隐式遍历
如果允许使用数组内置的高阶方法(内部仍会遍历,但无需手动编写循环),可以结合对象解构精准移除属性:
const processedArray = primaryArray.map(item => ({ ...item, answers: item.answers.map(ans => { const { isCorrect, ...rest } = ans; return rest; }) })); console.log(processedArray);
说明:
- 同样是深拷贝,不修改原数组
- 代码逻辑直观,便于后续维护,性能与原生JSON方法接近
内容的提问来源于stack exchange,提问作者Mohammad Abdulhakim
相关产品推荐
相关产品推荐

