Javascript 在嵌套对象上递归添加字段

Javascript 在嵌套对象上递归添加字段,javascript,Javascript,我需要递归地在对象上添加uuid, 我如何使用javascript实现这一点 我的想法是BFS/DFS都在工作 我的想法 输入 预期结果 let uuid=“ef910f30-fe25-0134-8f50-745c898f0819”; 函数递归添加(obj){ if(Array.isArray(obj))//如果obj是数组 forEach(addrecursive);//然后对其所有项递归调用add else if(obj&&typeof obj==“object”){//否则如果它是一个对

我需要递归地在对象上添加uuid, 我如何使用javascript实现这一点

我的想法是BFS/DFS都在工作

我的想法 输入 预期结果
let uuid=“ef910f30-fe25-0134-8f50-745c898f0819”;
函数递归添加(obj){
if(Array.isArray(obj))//如果obj是数组
forEach(addrecursive);//然后对其所有项递归调用add
else if(obj&&typeof obj==“object”){//否则如果它是一个对象(需要“obj&&”部分,因为typeof null==“object”)
obj.id=uuid;//向其添加id属性
Object.keys(obj.forEach(k=>addRecursively(obj[k]));//然后对其所有项递归调用add
}
}
让obj={“viewType”:“列表视图”,“节”:[{“字段”:[“Id”,“Name”]},{“children”:[{“Name”:“no”}]};
递归加法(obj);

控制台日志(obj)您应该注意到,
typeof[]==“object”!==“数组”
因为数组是JS中的对象<代码>结构。地图
只是一种浪费!它正在创建一个新的数组,而这个数组不在任何地方使用
forEach
更好
structure.map(this.adddrecursive)
structure.map(item=>this.adddrecursive(item))的快捷方式
<代码>开关案例中没有中断语句的人是无用的@易卜拉欣·赫里尔:在
返回后,你为什么需要
休息
?谢谢你,过去几周我一直在找这个
function addIdRecursively(root){
  if(root is a Object){
    ITERATE_EACH_ATTR_IN
    root.id = 'UUID'
  }
  else if(root is a array){
    root.map(item=>addIdRecursively(item))
  }
}
{
  "viewType": "List View",
  "sections": [
    {
      fields:[
      'Id',
      'Name'
      ]
    },  
    {
      "children": [
        {
          "name": "no"
        }
      ]
    }
  ]
}
{
  "id": "ef910f30-fe25-0134-8f50-745c898f0819",
  "viewType": "List View",

  "sections": [
    {
      "id": "ef910f30-fe25-0134-8f50-745c898f0819",
      fields:[
      'Id',
      'Name'
      ]
    },  
    {
      "id": "ef910f30-fe25-0134-8f50-745c898f0819",
      "children": [
        {
          "id": "ef910f30-fe25-0134-8f50-745c898f0819",
          "name": "no"
        }
      ]
    }
  ]
}
    // Generate a v4 UUID (random)
    import stringMatching = jasmine.stringMatching;
    import {log} from "../Util";
    const uuidV4 = require('uuid');
    // uuidV4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'

    export default class UUIDGenerator {
        structure = null
        constructor(structure) {
            this.structure =     {
                "viewType": "List View",
                "sections": [
                    {
                        fields:[
                            'Id',
                            'Name'
                        ]
                    },
                    {
                        "children": [
                            {
                                "name": "no"
                            }
                        ]
                    }
                ]
            }
        }
        process(){
            this.addIdRecursively(this.structure)
            log(this.structure)
            debugger
            return this.structure
        }

        addIdRecursively(structure){
            switch (typeof  structure){
                case 'array':
                    return structure.map(item => this.addIdRecursively(item))
                case 'object':
                    for (var key in structure) {
                        this.addIdRecursively(structure[key])
                    }
                    structure.id = uuidV4()
                    return structure
            }
        }
    }