请教一个复杂数组如何转换成object对象

我有一个这样的数组数据:

data: [
        {
          nameEn: 'QQQ',
          defaultValue: '1111',
          type: 'String',
          id: '1',
          parentId: ''
        },
        {
          nameEn: 'www',
          defaultValue: '2222',
          type: 'Array',
          id: '2',
          parentId: '',
          children: [
            {
              nameEn: 'www1',
              defaultValue: '333',
              type: 'Array',
              id: '2.1',
              parentId: '2',
              children: [
                {
                  nameEn: 'www11',
                  defaultValue: '444',
                  type: 'Number',
                  id: '2.1.1',
                  parentId: '2.1',
                },
                {
                  nameEn: 'www14',
                  defaultValue: '1234325464',
                  type: 'Array',
                  id: '2.1.2',
                  parentId: '2.1',
                  children: [
                    {
                      nameEn: 'www141',
                      defaultValue: '2321414',
                      type: 'Number',
                      id: '2.1.2.1',
                      parentId: '2.1.2',
                    },
                    {
                      nameEn: 'www142',
                      defaultValue: '2222222',
                      type: 'Number',
                      id: '2.1.2.2',
                      parentId: '2.1.2',
                    }
                  ]
                }
              ]
            },
            {
              nameEn: 'www2',
              defaultValue: '33344',
              type: 'Object',
              id: '2.2',
              parentId: '2',
              children: [
                {
                  nameEn: 'www21',
                  defaultValue: '44445454',
                  type: 'Number'
                }
              ]
            }
          ]
        },
        {
          nameEn: 'QQQ222',
          defaultValue: '33333',
          type: 'String',
          id: '3',
          parentId: ''
        }
      ]

现在我需要把这个数组数据转换成如下格式的Object数据:

{
    QQQ: '1111',
    www: [
         {
            www1: [
                {
                    www11: 444
                },
                {
                    www14: [
                        www141: 2321414,
                        www142: 2222222
                    ]
                }
            ],
        }
        {
            www21: 44445454
        }
    ],
    QQQ222: '33333
}

我自己的代码没了。。所以没法贴我自己的代码上来,如果有大神之前做过的话,请教一下如何做这个递归。

---补充---
我想要的效果是区分{}和[]两种类型的

阅读 2.3k
3 个回答
function transfer(root, v) {
    let { nameEn: key } = v
    
    if (v.children && v.children.length) {
        let target = {};
        v.children.forEach(child => {
            transfer(target, child);
        })
        root[key] = target;
    } else {        
        root[key] = v.defaultValue;
    }
}
let result = {};
data.forEach(v => {
    transfer(result, v);
})

console.log(result);
function handle(arr) {
    var result = {};
    arr.forEach(function(obj) {
        result[obj.nameEn] = obj.children ? handle(obj.children) : obj.defaultValue;
    });
    return result;
}

console.log(handle(data));
function transform(arr) {
    var ret = {};
    if (Array.isArray(arr)) {
        for (var i = 0; i < arr.length; ++i) {
            var obj = arr[i];
            var isArray = Array.isArray(obj.children);
            ret[obj.nameEn] = isArray ? transform(obj.children) : obj.defaultValue;
        }
    }
    return ret;
}
console.log(transform(data));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题