如何转换对象数组为Highcharts多折线图所需的输入格式?
实现逻辑
- 第一步:从原数组提取所有不重复的日期,按时间升序排序,作为统一的x轴基准。
- 第二步:构造ID和日期的二维映射表,存储每个ID对应各个日期的Count值,方便后续快速查找。
- 第三步:遍历所有ID,按排序后的日期列表逐个匹配Count值,无匹配值的位置填充null,生成最终格式的数组。
完整实现代码
function transformData(original) { // 生成升序排列的去重日期列表 const sortedDates = Array.from(new Set(original.map(item => item.date))) .sort((dateA, dateB) => new Date(dateA) - new Date(dateB)) // 构建ID-日期的Count映射 const idDateCountMap = {} original.forEach(item => { if (!idDateCountMap[item.ID]) { idDateCountMap[item.ID] = {} } idDateCountMap[item.ID][item.date] = item.Count }) // 生成符合要求的结果 return Object.keys(idDateCountMap).map(id => { return { Identity: id, data: sortedDates.map(date => { return idDateCountMap[id].hasOwnProperty(date) ? idDateCountMap[id][date] : null }) } }) } // 测试调用示例 const Original = [ { "date": "1997-09-29", "Count": 100, "ID": "AB12-R" }, { "date": "1997-12-30", "Count": 104.7, "ID": "AB13-R" }, { "date": "1998-03-30", "Count": 981, "ID": "BA12-R" }, { "date": "1998-06-01", "Count": 341, "ID": "BA12-R" } ] const result = transformData(Original) console.log(result)
内容的提问来源于stack exchange,提问作者Shivam Agrawal
相关产品推荐
相关产品推荐

