javascript数据转换

如何把a数组形式的数据转换为newA形式的数据?


  let a = [{
        name: 'aa',
        platform: 'iOS1',
        version: '10.3.4.5654',
        upgradeNum: 500,
        creator: 'Jack',
        data: {
            createdAt: '2014-12-21 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 1`,
            upgradeNum: 'Upgraded: 56',
        }
    }, {
        name: 'aa',
        platform: 'iOS1',
        version: '10.3.4.5654',
        upgradeNum: 500,
        creator: 'Jack',
        data: {
            createdAt: '2014-12-22 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 2`,
            upgradeNum: 'Upgraded: 57',
        }
    }, {
        name: 'aa',
        platform: 'iOS1',
        version: '10.3.4.5654',
        upgradeNum: 500,
        creator: 'Jack',
        data: {
            createdAt: '2014-12-23 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 3`,
            upgradeNum: 'Upgraded: 58',
        }
    }, {
        name: 'bb',
        platform: 'iOS2',
        version: '10.3.4.5654',
        upgradeNum: 600,
        creator: 'Tom',
        data: {
            createdAt: '2014-12-11 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 1`,
            upgradeNum: 'Upgraded: 1',
        }
    }, {
        name: 'bb',
        platform: 'iOS2',
        version: '10.3.4.5654',
        upgradeNum: 600,
        creator: 'Tom',
        data: {
            createdAt: '2014-12-22 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 2`,
            upgradeNum: 'Upgraded: 2',
        }
    }, ]
    let newA = [{
        name: 'aa',
        platform: 'iOS1',
        version: '10.3.4.5654',
        upgradeNum: 500,
        creator: 'Jack',
        children: [{
            createdAt: '2014-12-21 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 1`,
            upgradeNum: 'Upgraded: 56',
        }, {
            createdAt: '2014-12-22 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 2`,
            upgradeNum: 'Upgraded: 57',
        }, {
            createdAt: '2014-12-23 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 3`,
            upgradeNum: 'Upgraded: 58',
        }]
    }, {
        name: 'bb',
        platform: 'iOS2',
        version: '10.3.4.5654',
        upgradeNum: 600,
        creator: 'Tom',
        children: [{
            createdAt: '2014-12-11 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 1`,
            upgradeNum: 'Upgraded: 1',
        }, {
            createdAt: '2014-12-22 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 2`,
            upgradeNum: 'Upgraded: 2',
        }]
    }]

题主要的代码如下


<script>

    let a = [{
        name: 'aa',
        platform: 'iOS1',
        version: '10.3.4.5654',
        upgradeNum: 500,
        creator: 'Jack',
        data: {
            createdAt: '2014-12-21 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 1`,
            upgradeNum: 'Upgraded: 56',
        }
    }, {
        name: 'aa',
        platform: 'iOS1',
        version: '10.3.4.5654',
        upgradeNum: 500,
        creator: 'Jack',
        data: {
            createdAt: '2014-12-22 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 2`,
            upgradeNum: 'Upgraded: 57',
        }
    }, {
        name: 'aa',
        platform: 'iOS1',
        version: '10.3.4.5654',
        upgradeNum: 500,
        creator: 'Jack',
        data: {
            createdAt: '2014-12-23 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 3`,
            upgradeNum: 'Upgraded: 58',
        }
    }, {
        name: 'bb',
        platform: 'iOS2',
        version: '10.3.4.5654',
        upgradeNum: 600,
        creator: 'Tom',
        data: {
            createdAt: '2014-12-11 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 1`,
            upgradeNum: 'Upgraded: 1',
        }
    }, {
        name: 'bb',
        platform: 'iOS2',
        version: '10.3.4.5654',
        upgradeNum: 600,
        creator: 'Tom',
        data: {
            createdAt: '2014-12-22 23:12:00',
            date: '2014-12-24 23:12:00',
            name: `This is production name 2`,
            upgradeNum: 'Upgraded: 2',
        }
    },]
    kv = {};
    let newA=[]
    a.forEach(i => {
        let index = kv[i.name] === undefined ? newA.length : kv[i.name];
        kv[i.name] = index;
        let item = newA[index] || i;
        if (item.children) {
            item.children.push(i.data)
        } else {
            item.children = [i.data];
            delete i.data;
            newA.push(item)
        }
    });
    console.log(newA)
</script>

var newA = []
a.forEach(i => {
    let suitItem = newA.find(j => j.name === i.name)
    if (suitItem) {
        suitItem.children.push(i.data)
    } else {
        let item = {
            ...i,
            children: [i.data]
        }
        delete item.data
        newA.push(item)
    }
})
console.log('newA', newA)

代码如下:

    let newA=[];
    let arr=[];
        a.forEach(i => {
        if(arr[i.name] === undefined){//不存在的时候
            arr[i.name]=newA.length;//保存i.name在newA中所在的下标,也就是第几个新添加到newA的不同i.name
            i.children = [i.data];
            delete i.data;
            newA.push(i)
        }
        else{
            let obj= newA[arr[i.name]];//获取已存在的
            obj.children.push(i.data)//添加children属性
        }
    });
        console.log(newA)

结果:

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632