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)