如何用Filter与扩展运算符替换对象数组并赋值回原配置对象
解决方案
情况1:直接修改原对象(允许变更原数据)
如果不需要保留原remainingConfig的副本,可以直接逐层赋值替换:
// 先确认目标层级存在,避免报错 if (remainingConfig[sdb.menu]?.params) { remainingConfig[sdb.menu].params.menu = filteredMenu; } // 如果params可能不存在,需要先创建params对象 else if (remainingConfig[sdb.menu]) { remainingConfig[sdb.menu].params = { menu: filteredMenu }; }
情况2:创建新对象(保持原数据不变,immutable方式)
如果要避免修改原对象,需要用扩展运算符逐层解构并替换目标数组,确保完整保留原有结构:
const updatedRemainingConfig = { // 拷贝外层所有属性 ...remainingConfig, // 针对目标menu键对应的对象,拷贝原有属性 [sdb.menu]: { ...(remainingConfig[sdb.menu] || {}), // 处理params层级,拷贝原有params属性,替换menu数组 params: { ...(remainingConfig[sdb.menu]?.params || {}), menu: filteredMenu } } };
为什么之前的扩展运算符没生效?
你之前的问题大概率是只浅拷贝了外层对象,没有深入到params.menu这一层级进行替换。必须逐层解构到目标数组所在的嵌套层级,才能在保留原有结构的同时完成替换。
内容的提问来源于stack exchange,提问作者Saravanan R
相关产品推荐
相关产品推荐

