如何为多层嵌套对象数组统一添加isChecked键值对?
为多层嵌套对象数组批量添加
isChecked属性的最优实现 递归遍历方案(一次处理所有层级)
不用多次手动调用map,递归可以一次性遍历所有嵌套层级,给每个对象都加上isChecked: false,同时自动处理嵌套的prod和op数组。
针对固定嵌套字段(prod/op)的实现
function addIsChecked(item) { // 处理数组:递归遍历每个元素 if (Array.isArray(item)) { return item.map(addIsChecked); } // 处理对象:添加isChecked,再处理嵌套的prod/op if (typeof item === 'object' && item !== null) { const updatedObj = { ...item, isChecked: false }; // 递归处理prod数组 if (updatedObj.prod) updatedObj.prod = addIsChecked(updatedObj.prod); // 递归处理op数组 if (updatedObj.op) updatedObj.op = addIsChecked(updatedObj.op); return updatedObj; } // 非对象/数组直接返回 return item; } // 使用示例 const originalData = [ { id: 'outer1', prod: [{ id: 'prod1', op: [{ id: 'op1' }, { id: 'op2' }] }] }, { id: 'outer2', prod: [{ id: 'prod2' }] } ]; const processedData = addIsChecked(originalData);
通用版(自动处理所有嵌套数组)
如果后续可能新增其他嵌套数组字段,用这个版本更灵活,不需要硬编码字段名:
function addIsChecked(item) { if (Array.isArray(item)) { return item.map(addIsChecked); } if (typeof item === 'object' && item !== null) { const updatedObj = { ...item, isChecked: false }; // 遍历对象所有属性,自动递归处理嵌套数组 Object.keys(updatedObj).forEach(key => { if (Array.isArray(updatedObj[key])) { updatedObj[key] = addIsChecked(updatedObj[key]); } }); return updatedObj; } return item; }
方案优势
- 只需要一次遍历即可完成所有层级的属性添加,避免多次手动调用
map的冗余操作 - 递归逻辑清晰,扩展性强:新增嵌套字段时,只需要在固定字段版里加判断,或者直接用通用版自动适配
- 不会修改原对象(使用对象展开语法
...),保持数据不可变性
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

