假设我们有一个对象如下:

const obj = {
  name: 'obj',
  children: [
    {
      name: 'child1',
      children: [
        {
          name: 'grandchild1',
          children: []
        },
        {
          name: 'grandchild2',
          children: []
        }
      ]
    },
    {
      name: 'child2',
      children: [
        {
          name: 'grandchild3',
          children: []
        }
      ]
    }
  ]
};

我们可以使用递归函数来实现将每一层对象增加一个属性的需求:

function addProp(obj) {
  obj.prop = 0; // 添加属性
  if (obj.children && obj.children.length > 0) { // 如果有 children
    obj.children.forEach(child => { // 遍历 children
      addProp(child); // 递归调用 addProp
      if (child.children && child.children.length > 0) { // 如果 child 有 children
        child.children.forEach(grandchild => { // 遍历 grandchild
          addProp(grandchild); // 递归调用 addProp
        });
      }
    });
  }
}

addProp(obj);
console.log(obj);

输出结果为:

{
  name: 'obj',
  children: [
    {
      name: 'child1',
      children: [
        {
          name: 'grandchild1',
          children: [],
          prop: 0
        },
        {
          name: 'grandchild2',
          children: [],
          prop: 0
        }
      ],
      prop: 0
    },
    {
      name: 'child2',
      children: [
        {
          name: 'grandchild3',
          children: [],
          prop: 0
        }
      ],
      prop: 0
    }
  ],
  prop: 0
}

可以看到,每一层的对象都增加了一个属性 prop,其值为 0。如果该对象有 children,则其 children 中的每一个对象也会增加该属性。如果该对象的 children 中的对象还有 children,则其 children 中的每一个对象也会增加该属性。这样就实现了将每一层对象增加一个属性的需求。

ES6 递归添加属性到多层嵌套对象 - 详细教程

原文地址: https://www.cveoy.top/t/topic/oPdM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录