js数组中每一个对象,相同添加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]
    }
}
// console.log(resObj);
 
//  数据的处理
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)

作者:路宝的link,发布于:2020/07/22
原文:https://www.cnblogs.com/myan/p/13358690.html