为了账号安全,请及时绑定邮箱和手机立即绑定

递归方法转换,直到数组耗尽

递归方法转换,直到数组耗尽

狐的传说 2022-01-07 14:05:40
我的代码中有一个笨拙且无法缩放的方法。y是一个具有键/值类对象的数组对象,具有两个属性:name唯一的字符串属性:该值由children属性区分,它是另一个与 y 对象类型相同的数组。for (var i = 0; i < y.length; i++) {  let objx = y[i];  let name = objx["name"];  let inner = objx["children"];  for (var i = 0; i < inner.length; i++) {    var z = inner[i]["name"];    let h = inner[i]["children"];    console.log(h);  }  // more for loops on the h object now, and so on.}是否有可能有一个方法来构建一个包含所有名称字符串属性的新集合,直到所有相应的子属性返回 0 计数?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

let y = {

  name: 'parent',

  children: [

    {name: 'child1', children: []},

    {

      name: 'child2', children: [

        {name: 'grandChild1', children: []}

      ]

    },

  ]

};


let getNames = y => [y.name, ...y.children.flatMap(getNames)];

let names = getNames(y);

console.log(names);


查看完整回答
反对 回复 2022-01-07
?
倚天杖

TA贡献1828条经验 获得超3个赞

您可以采用递归函数。


const

    getNames = array => array.flatMap(({ name, children }) => [name, ...getNames(children)]);

    


var array = [{ name: 'parent', children: [{ name: 'child1', children: [] }, { name: 'child2', children: [{ name: 'grandChild1', children: [] }] }] }];


console.log(getNames(array));


查看完整回答
反对 回复 2022-01-07
?
守候你守候我

TA贡献1802条经验 获得超10个赞

这是基本递归。制作一个循环数据并与孩子一起调用自身的函数。


var myData = [{

  name: 'foo',

  children: [{

    name: 'foo-1',

    children: [{

      name: 'foo-1-1'

    }]

  }, {

    name: 'foo-2',

    children: [{

      name: 'foo-2-1'

    }]

  }]

}]



function loopOver(array, result) {

  array.forEach( function (data) {

    console.log(data.name)

    result.push(data.name)

    if (data.children) {

      return loopOver(data.children, result)

    }

  })

  return result

}


console.log(loopOver(myData, []))


查看完整回答
反对 回复 2022-01-07
  • 3 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号