js如何转换如下数据?

需求:把数据res整成validRes,循环了半天还是没整理出来,各位大佬们,请问该如何转换?谢谢 ~

    createdate: '2020-04-09', 
    data: 'xxxxx1' 
},{ 
    createdate: '2018-08-24', 
    data: 'xxxxx2' 
},{ 
    createdate: '2020-04-23', 
    data: 'xxxxx3'
}
let validRes = [{ 
    year: '2020', 
    data: [{   
        month: '4', 
        data: [{ 
            day: '04-09', 
            data 'xxxxx1' 
       },{ 
            day: '04-23', 
            data: 'xxxxx3' 
       }]
   }] 
},{ 
   year: '2018', 
   data: [{ 
        month: '8', 
        data: [{ 
            day: '08-24', 
            data: 'xxxxx2' 
       }] 
   }] 
}]
阅读 2.5k
4 个回答
const source = [{
    createdate: '2020-04-09',
    data: 'xxxxx1'
}, {
    createdate: '2018-08-24',
    data: 'xxxxx2'
}, {
    createdate: '2020-04-23',
    data: 'xxxxx3'
}, {
    createdate: '2020-05-23',
    data: 'xxxxx3'
}];
const obj = {};

source.map(value => {
    const splitDate = value.createdate.split('-');
    const year = splitDate[0];
    const month = `${parseInt(splitDate[1])}`;
    const day = value.createdate.replace(new RegExp(`${splitDate[0]}-`), '');

    if (!obj[year]) {
        obj[year] = {
            year,
            data: {}
        }
    }
    if (!obj[year].data[month]) {
        obj[year].data[month] = {
            month,
            data: []
        }
    }

    obj[year].data[month].data.push({
        day,
        data: value.data
    });
});

for (const key in obj) {
    obj[key].data = Object.values(obj[key].data);
}
console.log(Object.values(obj));

这是我想到的最简洁的代码

function extend(data) {
    let res = {};
    for (let i = 0; i < data.length; i++) {
        let date = data[i].createdate.split('-');
        if (!res[date[0]]) {
            res[date[0]] = {};
            res[date[0]][date[1]] = [{
                day: `${date[1]}${date[2]}`,
                data: data[i].data
            }]
        } else if (!res[date[0]][date[1]]) {
            res[date[0]][date[1]] = [{
                day: `${date[1]}${date[2]}`,
                data: data[i].data
            }]
        } else {
            res[date[0]][date[1]].push({
                day: `${date[1]}${date[2]}`,
                data: data[i].data
            })
        }
    }
    console.log(res);
}

提供下思路

// 格式处理
const format = (datas) => {
  const cache = {};
  datas.forEach(item => {
    const [year, month, day] = item.createdate.split('-');
    cache[year] = cache[year] || { [month]: [] };
    cache[year][month].push({
      day: `${month}-${day}`,
      data: item.data
    });
  });
  return Object.keys(cache).map(year => ({
    year: year,
    data: Object.keys(cache[year]).map(month => ({
      month: `${parseInt(month)}`,
      data: cache[year][month]
    }))
  }));
};

// 你的数据定义
const data = [
  {
    createdate: '2020-04-09',
    data: 'xxxxx1'
  },
  {
    createdate: '2018-08-24',
    data: 'xxxxx2'
  },
  {
    createdate: '2020-04-23',
    data: 'xxxxx3'
  }
];

// 测试
console.log('原始数据', data);
console.log('处理后', format(data));

image

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