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

js将二维数组对象转化为一维数组对象

js将二维数组对象转化为一维数组对象

慕田峪9158850 2019-03-07 14:15:07
let arr = [  {    a: 1,    b: 2,    c: 3,    children: [      {        id: 1,        a: 1-1,        b: 1-2,        c: 1-3,      }    ]  },  {    a: 2-1,    b: 2-2,    c: 2-3,    children: []  }]要将数据格式变成同时每个对象添加一个唯一的key值function getData (arr) {arr.forEach((item, index) => {brr.push( Object.assign(item, {key: index}) )if (item.children) {  getData(item.children)}delete item.children;})return brr}getData(arr)我写了个提取的方法 children提取出来了,但是原来的children还是存在,而且key值也不是唯一的
查看完整描述

4 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

下面一段程序供参考, 层级多深都能支持。


解释下这里用for不用forEach的原因,for在当前循环判断生效后,往arr添加后面添加子项,并会影响到下次循环,而forEach则不然。本来for的这个特性是个缺陷,ES5 forEach的出现也是为了弥补这个缺陷,但是事无绝对,用得好就是优势。


for(let item of arr) {

    if(item.children) {

        arr = arr.concat(item.children);

        delete item.children

    }

}

console.log(arr);

如果要求保持顺序, 下面代码参考下


for(let i=0; i < arr.length ; i++) {

    if(arr[i].children) {

      arr = arr.slice(0,i+1).concat(arr[i].children,arr.slice(i+1))

      delete arr[i].children

    }

}

console.log(arr);

PS:能用循环解决的问题,就不要用递归,如果层次太深,内存吃不消不说,还有可能调用栈溢出,程序崩溃。


由于题主是图片, 测试代码我也贴一下吧:


let arr = [

  {

    a:1,

    b:2,

    c:3,

    children: [

      {

        id:1,

        a: 1-1,

        b: 1-2,

        c: 1-3

      },

      {

        id: 2,

        a: 1-1,

        b: 1-2,

        c: 1-3,

        children: [

          {

            id:3,

            a: 1-1,

            b: 1-2,

            c: 1-3,

            children: [

              {

                id: 4,

                a: 1-1,

                b: 1-2,

                c: 1-3

              }

            ]

          }

        ]

      }

    ]

  },

  {

    a: 2-1,

    b: 2-2,

    children: []

  }

]


查看完整回答
反对 回复 2019-04-08
?
四季花海

TA贡献1811条经验 获得超5个赞

lodash了解一下


查看完整回答
反对 回复 2019-04-08
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

注意你的push是在判断外面,依旧会执行


查看完整回答
反对 回复 2019-04-08
  • 4 回答
  • 0 关注
  • 3210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信