如何更新数组内对象属性且不将原数组转换为对象?
解决数组元素属性更新后保持数组类型的问题
你之所以会得到对象而非数组,是因为错误地把数组当成普通对象用展开语法处理了——直接{...sections}会把数组的索引转为对象的键,最终生成一个普通对象,而非数组。下面给两种靠谱的解决方法:
方法一:用map遍历生成新数组
这是处理不可变数据更新的常用方式,遍历数组时仅修改目标索引的元素:
const updatedSections = form[id].values.sections.map((section, idx) => idx === 0 ? { ...section, body: '你的新body内容' } : section );
方法二:先拷贝数组再更新指定元素
先通过数组展开语法浅拷贝原数组,再替换目标索引的对象(同样用对象展开保留其他属性):
const originalSections = form[id].values.sections; const updatedSections = [...originalSections]; // 更新索引0的body属性,同时保留attachments等其他属性 updatedSections[0] = { ...updatedSections[0], body: '你的新body内容' };
两种方法都能保证updatedSections始终是数组类型,且不会修改原数组(如果需要原地修改可以直接操作原数组,但通常推荐不可变更新的方式)。
内容的提问来源于stack exchange,提问作者user8779054
相关产品推荐
相关产品推荐

