如何替换javascript对象中的每个ID实例?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (100)

我试图用一个随机的唯一ID值替换“id”的每个实例。

有什么办法一次把它们全部替换掉吗?

我的代码:

var theobject = [
    {
    "id":"lol",
    "milk":[
            {
                "id":"lol",
                "waffle":[
                        {
                            "id":"lol",
                            "eggo":[]
                        }
                    ]
            },
            {
                "id":"lol",
                "cookies":[]
            }
        ]
    },
    {
    "id":"lol",
    "donut":[
            {
                "id":"lol",
                "cheeto":[]
            }
        ]
    }
];
提问于
用户回答回答于

尝试以下一种简单的递归解决方案,它将更新所有id:

var theobject =[{"id":"lol","milk":[{"id":"lol","waffle":[{"id":"lol","eggo":[]}]},{"id":"lol","cookies":[]}]},{"id":"lol","donut":[{"id":"lol","cheeto":[]}]}];

function updateId(arr){
  for(var i = 0; i < arr.length;i++){
     Object.keys(arr[i]).forEach((key)=>{
        if(arr[i][key].constructor.toString().indexOf("Array") > -1)
           updateId(arr[i][key]);
     });
      if(arr[i].id)
        arr[i].id = Math.random().toString(36).slice(-8);
  }
}
updateId(theobject);
console.log(theobject);

用户回答回答于

最简单的方法=递归解决方案。 没有必要的图书馆

假设你知道每个对象将具有密钥的ID和子项,以下将按发布的方式工作。

否则,如果对象上可能不存在键,则需要将每个变异范围嵌套在“if”括号内。

const makeId = (objArray) => {
  return objArray.map((obj, i) => {
    obj.id = Math.floor(Math.random() * 1234567890);   // Just making a simple ID.  Typically use "uuid" or some other ID libarary generator.

    if (obj.children.length) obj.children =  makeId(obj.children);

    return obj;
  });
}

makeId(theobject);

扫码关注云+社区

领取腾讯云代金券