Node.js中如何将MySQL查询响应转换为带唯一键的多数组结构
Node.js 格式转换实现代码
直接复制以下代码到你的Node.js项目中运行即可:
// 填入你从MySQL拿到的原始查询结果 const mysqlRawData = [ {created_at:'06-23-21, 23:33:43',user_count:1,user:"user1"}, {created_at:'06-23-21, 20:12:50',user_count:4,user:"user2"}, {created_at:'06-23-21, 19:04:10',user_count:15,user:"user1"}, {created_at:'06-23-21, 19:04:10',user_count:26,user:"user2"}, {created_at:'06-23-21, 16:11:56',user_count:46,user:"user3"} ] const transform = (raw) => { // 提取时间列表,顺序和原始数据顺序一致 const timeArr = raw.map(i => i.created_at) // 提取去重用户列表 const userArr = [...new Set(raw.map(i => i.user))] // 初始化结果结构,用户数组默认全填0 const res = { data: { time: timeArr } } userArr.forEach(u => res.data[u] = new Array(timeArr.length).fill(0)) // 遍历原始数据填值 raw.forEach(i => { const idx = timeArr.indexOf(i.created_at) res.data[i.user][idx] = i.user_count }) return res } // 输出转换后的结果 console.log(JSON.stringify(transform(mysqlRawData), null, 2))
补充说明
- 如果你需要调整时间排序,在提取
timeArr后添加排序逻辑即可,示例按时间升序排列:timeArr.sort((a, b) => new Date(a) - new Date(b)) - 如果同一个时间同一个用户存在多条统计数据,需要累加数值的话,将赋值代码修改为:
res.data[i.user][idx] += i.user_count
内容的提问来源于stack exchange,提问作者hassan
相关产品推荐
相关产品推荐

