JavaScript中替换嵌套对象内部数组的实现问题咨询
代码问题排查及解决方案
现有代码的问题
- 无实际赋值操作:你使用了逗号运算符
webSections.sections[index].questions, newMenu[index],只会执行两个表达式的求值,不会把后者赋值给前者,完全没有修改属性的效果 - forEach返回值无效:forEach本身没有返回值,你在回调里写return没有任何作用
- 语法不合法:回调函数的括号不匹配,结尾多写了右括号
- 结构不匹配:原结构中
questions是数组类型,直接赋值newMenu[index](对象类型)会破坏原有结构
正确实现方式
方案1:原地修改原对象
如果可以直接修改原数据,直接在遍历中赋值即可:
webSections.sections.forEach((item, index) => { // 原questions是包含单个对象的数组,所以把newMenu对应项包裹成数组赋值 item.questions = [newMenu[index]] })
方案2:生成新对象副本(不改动原数据)
如果需要保留原数据不变,用map生成新的sections数组即可:
// originalData是你最外层的原始对象 const newData = { ...originalData, webSections: { ...originalData.webSections, sections: originalData.webSections.sections.map((section, idx) => ({ ...section, questions: [newMenu[idx]] })) } }
注意事项
你提供的newMenu数组第二项的属性名是item,和其他项的items以及原结构的属性名不一致,属于笔误,建议先修正后再使用,避免后续访问属性时报错。
内容的提问来源于stack exchange,提问作者Ronald
相关产品推荐
相关产品推荐

