Echart数据转换(水平数据变成垂直数据)
var originaldatalist = [
{
name: "周一",
data: [
{
name: "直接访问",
data: 320
},
{
name: "邮件营销",
data: 120
},
{
name: "联盟广告",
data: 220
},
{
name: "视频广告",
data: 150
},
{
name: "搜索引擎",
data: 820
}
]
},
{
name: "周二",
data: [
{
name: "直接访问",
data: 302
},
{
name: "邮件营销",
data: 132
},
{
name: "联盟广告",
data: 182
},
{
name: "视频广告",
data: 212
},
{
name: "搜索引擎",
data: 832
}
]
},
{
name: "周三",
data: [
{
name: "直接访问",
data: 301
},
{
name: "邮件营销",
data: 101
},
{
name: "联盟广告",
data: 191
},
{
name: "视频广告",
data: 201
},
{
name: "搜索引擎",
data: 901
}
]
}
]
转换成
var datalist = [
{
name: "直接访问",
data: [320, 302, 301, 334, 390, 330, 320]
},
{
name: "邮件营销",
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: "联盟广告",
data: [220, 182, 191, 234, 290, 330, 310]
},
{
name: "视频广告",
data: [150, 212, 201, 154, 190, 330, 410]
},
{
name: "搜索引擎",
data: [820, 832, 901, 934, 1290, 1330, 1320]
}
];
1、使用三层循环
var yAxis = [];
var datalist = [];
for (var i = 0; i < originaldatalist.length; i++) {
yAxis.push(originaldatalist[i].name);
for (var j = 0; j < originaldatalist[i].data.length; j++) {
//判断是否有值
var tempk = -1;
for (var k = 0; k < datalist.length; k++) {
if (datalist[k].name == originaldatalist[i].data[j].name) {
tempk = k;
}
}
//有值添加无值新建
if (tempk >= 0) {
datalist[tempk].data.push(originaldatalist[i].data[j].data);
} else {
var temp = {
name: originaldatalist[i].data[j].name,
data: [originaldatalist[i].data[j].data]
}
datalist.push(temp);
}
}
}
2、先使用concat扁平化为一个数组,再使用双循环合并同类项
var yAxis = [];
var datalist = [];
for (var i = 0; i < originaldatalist.length; i++) {
yAxis = yAxis.concat(originaldatalist[i].name);
datalist = datalist.concat(originaldatalist[i].data);
}
for (var i = 0; i < datalist.length; i++) {
var listtemp = [datalist[i].data];
for (var j = i + 1; j < datalist.length; j++) {
if (datalist[i].name == datalist[j].name) {
listtemp.push(datalist[j].data);
datalist.splice(j, 1);
j--;
}
}
datalist[i].data = listtemp;
}
3、先使用concat扁平化,再使用reduce合并同类项
var yAxis = [];
var datalist = [];
for (var i = 0; i < originaldatalist.length; i++) {
yAxis = yAxis.concat(originaldatalist[i].name);
datalist = datalist.concat(originaldatalist[i].data);
}
var xx = datalist.reduce(function (res, item) {
//findIndex: 传入一个测试条件(函数)符合条件的数组第一个元素位置。
var index = res.findIndex(function (v) {
return v.name == item.name;
});
if (index > -1) {
if (Array.isArray(res[index].data)) {
res[index].data.push(item.data);
} else {
var listtemp = [res[index].data];
listtemp.push(item.data);
res[index].data = listtemp;
}
} else {
res.push(item);
}
return res;
}, []);
datalist = xx;
console.log(yAxis.join(","));
console.log(datalist);
4、先扁平化,后使用哈希(hash)来合并同类项
var yAxis = [];
var datalist = [];
for (var i = 0; i < originaldatalist.length; i++) {
yAxis = yAxis.concat(originaldatalist[i].name);
datalist = datalist.concat(originaldatalist[i].data);
}
//用个hash表存一下name在结果里对应的位置,就能将时间复杂度从幂函数降低到线性的时间复杂度
var hashTable = {};
var datalist = datalist.reduce(function (result, _ref) {
var name = _ref.name, data = _ref.data;
hashTable[name] !== undefined ? result[hashTable[name]].data.push(data) : hashTable[name] = result.push({
name: name,
data: [data]
}) - 1;
return result;
}, []);
console.log(yAxis.join(","));
console.log(datalist);
Echart数据转换(水平数据变成垂直数据)的更多相关文章
- 将undefault和null的数据转换成bool类型的数据 使用!!
<script> var o={}; var a=null; console.info(!!o.name); </script> 输出false 此方法是将undefault和 ...
- Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据
Android中如何将Bitmap byte裸数据转换成Bitmap图片int数据 2014-06-11 10:45:14 阅读375次 我们在JNI中处理得到的BMP图片Raw数据,我们应该如何 ...
- C# 封装SDK 获取摄像头的水平角度和垂直角度
最近需要做一个C#版本的控制终端,控制摄像头,获取摄像头的水平角度和垂直角度 获取当前摄像头的角度,需要调用一个名为NET_DVR_GetDVRConfig的bool类型的函数 在C++中,函数定义: ...
- 理解水平扩展和垂直扩展 (转载 http://yunjiechao-163-com.iteye.com/blog/2126981)
当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展.选用哪种策略主要依赖于要解决的问题 以及系统资源的限制.在这篇文章中我们将讲述这两种策略并讨论每种策越的优缺点.如果你已经 ...
- Web 站点的水平扩展和垂直扩展 (译文)
当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展.选 用哪种策略主要依赖于要解决的问题以及系统资源的限制.在这篇文章中我们将讲述这两种策略并讨论每种策越的优缺点.如果你已经有一 ...
- 数据库水平拆分和垂直拆分区别(以mysql为例)
数据库水平拆分和垂直拆分区别(以mysql为例) 数据库水平拆分和垂直拆分区别(以mysql为例) 案例: 简单购物系统暂设涉及如下表: 1.产品表(数据量10w,稳定) 2.订单表(数据 ...
- 第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)
数据分布图简介 中医上讲看病四诊法为:望闻问切.而数据分析师分析数据的过程也有点相似,我们需要望:看看数据长什么样:闻:仔细分析数据是否合理:问:针对前两步工作搜集到的问题与业务方交流:切:结合业务方 ...
- ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理
分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...
- mysql的水平拆分和垂直拆分
转:http://www.cnblogs.com/sns007/p/5790838.html 1,水平分割: 例:QQ的登录表.假设QQ的用户有100亿,如果只有一张表,每个用户登录的时候数据库都要从 ...
随机推荐
- Web开发——HTML基础(HTML响应式Web设计 Bootstrap)
参考: 参考:http://www.bootcss.com/ 目录: 1.什么是响应式 Web 设计? 2.创建自己的响应设计 3.使用 Bootstrap 1.什么是响应式 Web 设计? RWD ...
- python_代码中调用java类
1. 安装jpype (python调用java class文件用) 1.1. 自动安装:pip install jpype1 1.2. 手动方式安装jpype1 安装wheel:pip instal ...
- TZOJ:3660: 家庭关系
描述 给定若干家庭成员之间的关系,判断2个人是否属于同一家庭,即2个人之间均可以通过这些关系直接或者间接联系. 输入 输入数据有多组,每组数据的第一行为一个正整数n(1<=n<=100), ...
- vue axios拦截器 + 自编写插件 实现全局 loading 效果;
项目需求:用自定义的 .gif 图标实现全局 loading 效果:为避免在每个页面手动添加,且简单高效的实现,经查阅资料,最终采用了 vue axios拦截器 + 自编写 loading 插件:下面 ...
- python获取一年所有的日期
python获取一年所有的日期 自动识别闰年. import arrow def isLeapYear(years): ''' 通过判断闰年,获取年份years下一年的总天数 :param years ...
- 使用JavaScript实现在页面上所有内容加载完之前一直显示loading...页面
Html <body class="is-loading"> <div class="curtain"> <div class=& ...
- 2018年工作终总结&规划
收获满满的2018 收获总结: 1. 换了家有地区牌照的公司,薪酬涨了那么一点点,但是工作压力.强度下降不少,这样有更多时间来学习新知识. 2. 跟同事一起接了维护后台管理系统的私活,每个月多了一点点 ...
- cookie session 讲解
cookie: cookie的定义: cookie 是由web服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息,并且在每次请求时会携带保存的数据去访问服务器,所以cookie有 ...
- noip2016海港
题目描述 Description 小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客. 小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只 ...
- 【Spark-SQL学习之一】 SparkSQL
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...