js数组中每一个对象,相同添加child

假设我有以下数据 下面数组中如果有相同的tm 需要放入child中

const data = [
    {
        'tm': '2020-05-16',
        'nm': 'haha',
        'tmp': 'piouyjhjkn'
    },
    {
        'tm': '2020-06-16',
        'nm': 'haha',
        'tmp': 'piouyjhjkn'
    },
    {
        'tm': '2020-05-16',
        'nm': 'haha',
        'tmp': 'piouyjhjkn'
    },
    {
        'tm': '2020-07-16',
        'nm': 'haha',
        'tmp': 'piouyjhjkn'
    },
    {
        'tm': '2020-05-16',
        'nm': 'haha',
        'tmp': 'piouyjhjkn'
    },
    {
        'tm': '2020-09-16',
        'nm': 'haha',
        'tmp': 'piouyjhjkn'
    },
    {
        'tm': '2020-02-16',
        'nm': 'haha',
        'tmp': 'piouyjhjkn'
    },
    {
        'tm': '2020-02-16',
        'nm': 'haha',
        'tmp': 'piouyjhjkn'
    }
]

想要这样的效果

// var list = [
//     // 有相同的at,加入到child
//     {
//         'tm': '2020-02-16',
//         'child': [{
//             'nm': 'haha',
//             'tmp': 'piouyjhjkn'
//         },
//         {
//             'nm': 'haha',
//             'tmp': 'piouyjhjkn'0
//         }]
//     },
//     // 没有相同的就原样
//     {
//         'tm': '2020-02-16',
//         'nm': 'haha',
//         'tmp': 'piouyjhjkn'
//     }]

 

第一步 查重

 
const resObj = {}
for(let item of data){
    if(resObj[item.tm]){
        resObj[item.tm].push(item)
        // 第一次一定是走不到if 所以走到else 后面给的是数组 所以可以push
    }else {
        resObj[item.tm] = [item]
    }
}

第二步 数据的处理

const res = []
for(let key in resObj){
    if(resObj[key].length > 1){
        let child = resObj[key].map(item=>{return {nm:item.nm,tmp:item.tmp}})
        res.push({
            at:key,
            child
        })
    }else {
        res.push(resObj[key][0])
    }
}
console.log(res)

 

posted @ 2020-07-22 09:15  路宝的link  阅读(2149)  评论(0编辑  收藏  举报