You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多层嵌套对象数组统一添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:35:13