数组对象重新排序

   arr = [
        {id:1,name:'宠物美容'},
        {id:2,name:'清洁保养', children:[
            {id:4,name:'家庭清洁'}
            ]},
        {id:3,name:'汽车服务'}
    ];
    

上面的数组怎么重新排序成下面的格式?

   newArr = [
        {id:1,name:'宠物美容'},
        {id:2,name:'清洁保养'},
        {id:4,name:'家庭清洁'}
        {id:3,name:'汽车服务'}
    ];
    

各位老铁帮忙看看~_~谢谢

阅读 5.4k
4 个回答
function trans (arr) {
  return [].concat.apply([], arr.map(cur => {
    return [{id: cur.id, name: cur.name}].concat(cur.children ? trans(cur.children) : [])
  }))
}
let newArr = trans(arr)

// 定义转换方法
function getNewArr(arr = []) {
    let newArr = [];

    function eachArr(arr = []) {
        for (let item of arr) {
            const {
                id,
                name,
                children
            } = item;
            newArr.push({
                id,
                name,
            })
            if (children && children.length) {
                eachArr(children);
            }
        }
    }

    eachArr(arr);

    return newArr;
}

// 使用
let arr = [
        {id:1,name:'宠物美容'},
        {id:2,name:'清洁保养', children:[
            {id:4,name:'家庭清洁'}
            ]},
        {id:3,name:'汽车服务'}
];
let newArr = getNewArr(arr);

1.遍历arr,每个都取出id和name组成新的对象push进去newArr

2.如果arr中的对象里childern存在着值,也把值的id和name取出来形成一个新的对象push进newArr

既然es6那肯定多用用es6了

let arr = [
    {id:1,name:'宠物美容'},
    {id:2,name:'清洁保养', children:[
            {id:4,name:'家庭清洁'}
        ]},
    {id:3,name:'汽车服务'}
];

function format(arr) {
    return arr.reduce((result, item) => {
        return [...result, {id:item.id,name:item.name}, ...item.children || []]
    },[]);
}

console.log(format(arr));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进