将 (key : value) 添加到无限嵌套的子对象中

Ngu*_*206 6 javascript arrays nested object infinity

我有一个如下所示的数组(代码会话 2)。我想像这样将 id : random 添加到 {child Obj} 中:

{
  name : "Peter",
  age : "18",
  profession : "nurse",
  id : String(Math.random())
  children : [],
 }
Run Code Online (Sandbox Code Playgroud)

但它有两种情况:关键孩子的值可能是 [ ] 或 [ length !== 0 ]。我想无限循环父数组并为所有添加 id 。

注意:每个 {childObj} 内的关键孩子的值可能是一个类似于父数组的数组。我的最终目标是为来自响应 API 的所有元素设置 id,看起来像模板数组

非常感谢,如果我的英语让你感觉复杂,我很抱歉

[{
  name : "Peter",
  age : "18",
  profession : "nurse",
  children : []
 }
 { 
   name: "Jack",
   age: "98" ,
   profession: "doctor",
   children: [ {
                 name : "Peter",
                 age : "18",
                 profession : "nurse",
                children : []
               },
               {
                 name: "Varun",
                 age: "80"
                 profession: "scientist"
                 children: [
                             {
                                name: "Ishan"
                                age: "62",
                                profession: "teacher
                                children: [{....
                                 .....
                                 .....[{
                                       name: "Rahul",
                                       age: "23",
                                       profession: "engineer"
                                      children: [{
                                                  .....
Run Code Online (Sandbox Code Playgroud)

Nic*_*ons 7

您可以.map()在原始数据数组上使用,它返回对象及其id. 所述children在所映射的对象将是映射的阵列,再次使用相同的映射函数,如下所示:

const data = [{ name: "Peter", age: "18", profession: "nurse", children: [] }, { name: "Jack", age: "98", profession: "doctor", children: [{ name: "Peter", age: "18", profession: "nurse", children: [] }, { name: "Varun", age: "80", profession: "scientist", children: [{ name: "Ishan", age: "62", profession: "teacher", children: [{ name: "Rahul", age: "23", profession: "engineer", children: [] }] }] } ] } ];

const res = data.map(function mapId({children, ...r}) {
  return {...r, id: String(Math.random()), children: children.map(mapId)};
});
console.log(res);
Run Code Online (Sandbox Code Playgroud)


小智 0

const obj = [{
  name: "Jack",
  age: "98",
  profession: "doctor",
  children: [
    {
      name: "Peter",
      age: "18",
      profession: "nurse",
      children: [],
    },
    {
      name: "Varun",
      age: "80",
      profession: "scientist",
      children: [
        {
          name: "Ishan",
          age: "62",
          profession: "teacher",
          children: [],
        },
      ],
    },
  ],
}];

const f = (_) => ({..._, id: String(Math.random()), children: _.children.map(f) })

console.log(obj.map(f));
Run Code Online (Sandbox Code Playgroud)