缘起:

在组装echart页面的时候,遇到这样一个问题,它是一个需要在循环内层的时候,同时循环外层,在内层循环中就要将外层获取的值存入,导致了一种纠缠状态,费了老劲儿,终于得到如下解决。记录之,绿色为语句功能注释。

/**
* @desc 获取用户使用网络数据
* @param index_type
* @param chatId
*/
function getNetWorkData(index_type,chatId,start,end) {
// 传递三个参数,index_type为数据类型,chatId为echarts容器Id,start为所取数据开始时间,end为结束时间
var app_id = get_app_id();
//从cookie获取当前应用id串,该id在ue文件中
var qdate =$("#date-written").text();
//从月份选择控件中取当前选择月份
var date_str="";
//定义一个空字符串变量
qdate=qdate.replace("年", "/");
//对月份进行处理,替换汉字"年"为"/"
qdate=qdate.replace("月", "/01");
//对月份进行处理,替换汉字"月"为"/01"
date_str = qdate.trim(); //查询时间
//去除月份字符串头尾空格
if (date_str != null && date_str != undefined) {
//只有当月份参数不为空才发起ajax请求
$.post(
"/jppt/jp-index-data/comments",
//请求地址
{
appid: app_id,
indexType: index_type,
startDate:start,
endDate:end
},
//请求参数,对象表示
function (result,status) {
//接收返回的json格式字符串及状态码
if (checkResult(result)) {
//检测数据返回是否正常
result = JSON.parse(result);
//对返回的字符串解析为json对象并赋值
console.log(result);
var xAxisData=[],series=[],appstore=[],legendData=[],
//定义x坐标显示名数组,series为图形值数组,appstore为临时数组,legendData为图标title数组
data = result['data'],comment;
//取所需使用的对象赋值,定义一个临时变量
$.each(data, function (app,obj) {
//遍历data对象,app为键值即app名,obj为每个app的值,一个存储有关于该app信息的对象
xAxisData.push(app);
//将app名推入x坐标数组,用于组装option
$.each(obj,function (i,a) {
//对obj对象进行二次遍历
var t = a['indexValue'].split("|");
//indexValue:"3G:0.2686155493365|4G:0.68090354160497|WIFI:0.72134356910983" 对此格式的字符串进行分割处理,成为t数组
$.each(t,function (j,s) {
//对t数组进行遍历,j为索引值,s为键值
comment = s.split(":");
//对分割后的数组如["3G:0.2686155493365"]进行二次分割成["3G",""0.2686155493365]
if(!appstore[j]){
//检测临时数组是否有属性j,即第j个存不存在,不存在则定义一个空数组,此处使用hasOwnProperty也是可以的,用以检测键名是否存在,以下同
appstore[j] = [];
}
if(!legendData[j]){
//如果图标数组含有j属性,将切割后的comment键名赋值给它,比如4G,此数组将用来在option中进行循环,因为series单元的数量由其决定
legendData[j] = comment[0];
}
var temp = (comment[1]*100).toFixed(2);
//截取长字符串为小数点后2位
appstore[j].push(temp);
//将截取后的字符串推入动态数组
});
}); });
//循环option中的series,循环图标名及data值
$.each(legendData,function (i,n) {
seriesItem = {
name: n,
type: 'bar',
barGap:"15%",
barWidth:90,
label: {
formatter: "{a} :{c} %",
position: "insideRight",
show: true
},
itemStyle: {
normal: {
label: {
formatter: "{a} : {c} %",
position: "insideRight",
show: true
}
}
},
data:appstore[i]
};
series.push(seriesItem);
//循环一次,将组装好的单元推入series数组
}); var dom = document.getElementById(chatId);
var myChart = echarts.init(dom);
var option=setNetWordOption(legendData,xAxisData,series);
if (option && typeof option === "object") {
myChart.setOption(option, true);
}
} else {
console.log("数据异常");
}
if(status == "success"){
$("#umask").removeClass("mask");
}
});
} }

一个解析json串并组装echarts的option的函数解析的更多相关文章

  1. Boost property_tree解析json

    使用Boost property_tree解析json 之前使用jsoncpp解析json,现在才知道boost就有解析的库,学习一下吧 property_tree可以解析xml,json,ini,i ...

  2. JSON语言规范与Java中两种解析工具基本使用

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6652250.html  一:JSON语言规范 一言以蔽之:“一个 :一个键值对,一个{}一个对象,一个[]一个 ...

  3. Android中解析Json数据

    在开发中常常会遇到解析json的问题 在这里总结几种解析的方式: 方式一: json数据: private String jsonData = "[{\"name\":\ ...

  4. .NET中常用的几种解析JSON方法

    一.基本概念 json是什么? JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是一种轻量级的数据交换格式,是存储和交换文本信息的语法. ...

  5. 解析JSON的两种方法eval()和JSON.parse()

    解析JSON 一种方法是使用eval函数. var dataObj = eval("("+json+")"); 必须把文本包围在括号中,这样才能避免语法错误,迫 ...

  6. Java解析Json数据的两种方式

    JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...

  7. JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

    JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

  8. 再次提供一个纯粹通过pl/sql解析json的方法。

    在github上面有一个叫pljson的项目,该项目就是用pl/sql 来解析json的. 项目地址:pljson(需翻|强),如果翻不了强的同学,我在国内克隆了一个副本,不定期同步更新 pljson ...

  9. Python3基础 json.loads 解析json格式的数据,得到一个字典

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

随机推荐

  1. spider RPC框架的需求来源与特性介绍(一)

    spider RPC 特性介绍 spider RPC 性能测试 spider RPC 入门指南 spider RPC 配置文件参考 spider RPC 开发指南 spider RPC 安全性 spi ...

  2. 深入理解SQL注入绕过WAF和过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

  3. ArcGIS Engine开发之空间查询

    空间查询功能是通过用户选择的空间几何体以及该几何体与当前地图中要素之间的几何关系进行空间查找,从而得到查询结果的操作. 相关类与接口 空间查询相关的类主要是SpatialFilter类,其实现的接口主 ...

  4. CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout使用

    本文介绍Design Support Library中CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout的使用. 先列出了Design S ...

  5. iOS版打地鼠游戏源码

    打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...

  6. chrome浏览器限制的端口

    1,    // tcpmux 7,    // echo 9,    // discard 11,   // systat 13,   // daytime 15,   // netstat 17, ...

  7. 自己解决虚拟机Ubuntu开机黑屏

    Virtual Box+Ubuntu 64bit,之前都能好好用,但昨天一打开,过了开始的一个选择界面(有什么恢复模式那个)就黑了,左上角的光标不闪,一直卡在那里,后来发现原因了. 1.先下载LeoM ...

  8. nginx+php-fpm+mysql分离部署详解

    相信大家将这三者部署到同一台主机应该已经不陌生了,今天在这里,给大家演示一下如何将三者部署到三台主机上. 实验系统:CentOS 6.6_x86_64 实验前提:大部分软件使用编译安装,请提前准备好编 ...

  9. [转]教你实践ASP.NET Core Authorization

    本文转自:http://www.cnblogs.com/rohelm/p/Authorization.html 本文目录 Asp.net Core 对于授权的改动很友好,非常的灵活,本文以MVC为主, ...

  10. [转]OAuth 2.0 - Authorization Code授权方式详解

    本文转自:http://www.cnblogs.com/highend/archive/2012/07/06/oautn2_authorization_code.html I:OAuth 2.0 开发 ...