要对如图一所示的左侧table的数据按照“总量”进行排序

  1,在前端实现

  2,数据格式为object,如图二

原创文章,转载请注明:http://www.cnblogs.com/phpgcs

javascript中经常操作就是json/object/array,它们之间也经常需要转换。

json/object没有sort方法,array有;因此先将data转换为array

不只是排序,其他很多操作如获取长度,增加删除元素,取最大最小值都需要转换为Array

  1. var proarray = [];
  2. for(x in data['province']) {
  3. proarray.push([x, data['province'][x]]);
  4. }
  5. proarray.sort(function(b,a){
  6. //因为是对总量进行排序,所以要对正面、中性、负面的总和进行比较
  7. return a[1]['zm']-b[1]['zm']+a[1]['zx']-b[1]['zx']+a[1]['fm']-b[1]['fm'];
  8. });

  

再打印以下 排序之后的 proarray变量(array)

原创文章,转载请注明:http://www.cnblogs.com/phpgcs

完整的源码如下:

  1. console.log(data['province']);
  2. console.log(typeof(data['province']));
  3.  
  4. var counter = 1;
  5. var tbody = '';
  6. tbody +=' <table class="table table-striped table-bordered table-hover" id="weiboprovince_table"> <thead> <tr> <th style="width:8px;">#</th> <th>省份</t h> <th>总量</th> <th>正面</th> <th>负面</th> </tr> </thead> <tbody>';
  7. var proarray = [];
  8. for(x in data['province']) {
  9. proarray.push([x, data['province'][x]]);
  10. }
  11. proarray.sort(function(b,a){
  12. return a[1]['zm']-b[1]['zm']+a[1]['zx']-b[1]['zx']+a[1]['fm']-b[1]['fm'];
  13. });
  14. for(x in proarray) {
  15. tbody += '<tr>';
  16. tbody += '<td>';
  17. tbody += '<div class="label label-success" style="color:white;">'+(counter++)+'</div>';
  18. tbody += '</td>';
  19. tbody += '<td>';
  20. tbody += proarray[x][0];
  21. tbody += '</td>';
  22. tbody += '<td>';
  23. tbody += parseInt(proarray[x][1]['zm']+ proarray[x][1]['zx'] + proarray[x][1]['fm']);
  24. tbody += '</td>';
  25. tbody += '<td>';
  26. tbody += proarray[x][1]['zm'];
  27. tbody += '</td>';
  28. tbody += '<td>';
  29. tbody += proarray[x][1]['fm'];
  30. tbody += '</td>';
  31. tbody += '</tr>';
  32. }
  33. tbody += '</tbody>';
  34. tbody += '</table>';
  35. $('#map_list').html(tbody);

  

延伸:

javascript中常用数据格式的转换

  • json->array
  1. function json2array(json){
  2. var result = [];
  3. var keys = Object.keys(json);
  4. keys.forEach(function(key){
  5. result.push(json[key]);
  6. });
  7. return result;
  8. }
  9. //example
  10. json2array({a:1,b:2});
  11. [1, 2]
  12. //more complex example
  13. json2array({20131013: 66, 20131014: 198, 20131015: 253, 20131016: 352, 20131017: 293, 20131018: 277, 20131019: 111, 20131020: 91, 20131021: 255, 20131022: 256, 20131023: 293, 20131024: 390, 20131025: 401, 20131026: 117, 20131027: 45, 20131028: 54, 20131029: 59, 20131030: 66, 20131031: 109, 20131101: 32});
  14. [66, 198, 253, 352, 293, 277, 111, 91, 255, 256, 293, 390, 401, 117, 45, 54, 59, 66, 109, 32]

  

  • array->string
  1. var a = [{"obj1":"phpgcs"}, {"obj2":"ganiks"}]
  2. console.log(a);
  3. //[Object, Object]
  4. JSON.stringify(a)
  5. //"[{"obj1":"phpgcs"},{"obj2":"ganiks"}]"

  

  • string->array
  1. "1,2".split(",").map(Number);
  2. [1, 2]
  3. "1,2".split(",");
  4. ["1", "2"]
  5. JSON.parse("["+"1,2"+"]");
  6. [1, 2]

  

  • object->json
  1. //php print_r($response);
  2.  
  3. .post(url, params, function(data){
  4. console.log(data);//data并不是规范的JSON格式的
  5. data = $.parseJSON(data);
  6. console.log(data);
  7. });
    //这里如果直接用.getJSON方法获取ajax数据则直接就是规范的JSON数据
  • array->object
  1. function toObject(arr) {
  2. var rv = {};
  3. for (var i = 0; i < arr.length; ++i)
  4. rv[i] = arr[i];
  5. return rv;
  6. }
  7. Your array already is more-or-less just an object, but arrays do have some "interesting" and special behavior with respect to integer-named properties. The above will give you a plain object.
  8. edit oh also you might want to account for "holes" in the array:
  9.  
  10. function toObject(arr) {
  11. var rv = {};
  12. for (var i = 0; i < arr.length; ++i)
  13. if (arr[i] !== undefined) rv[i] = arr[i];
  14. return rv;
  15. }

  

参考:

http://phpgcs.com/2013/10/31/javascript-tricks-collection.html

http://stackoverflow.com/questions/17684921/sort-json-object-in-javascript

http://stackoverflow.com/questions/1069666/sorting-javascript-object-by-property-value

http://stackoverflow.com/questions/4215737/convert-array-to-object

从一个实例看javascript几种常用格式的转换的更多相关文章

  1. Java中几种常用数据类型之间转换的方法

    Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...

  2. Qt保证只有一个实例(将CreateMutex得到的handle通过转换得到值)

    使用CreateMutex 可以实现只启动一个应用程序实例 view plaincopy to clipboardprint?#include <QApplication>#include ...

  3. ffmpeg转换参数和对几种视频格式的转换分析

    我们在将多种格式的视频转换成flv格式的时候,我们关注的就是转换后的flv视频的品质和大小.下面就自己的实践所得来和大家分享一下,主要针对avi.3gp.mp4和wmv四种格式来进行分析.通常在使用f ...

  4. hadoop中MapReduce中压缩的使用及4种压缩格式的特征的比较

    在比较四中压缩方法之前,先来点干的,说一下在MapReduce的job中怎么使用压缩. MapReduce的压缩分为map端输出内容的压缩和reduce端输出的压缩,配置很简单,只要在作业的conf中 ...

  5. 几种常用JavaScript设计模式es6

    设计模式分类(23种设计模式) 创建型 单例模式 原型模式 工厂模式 抽象工厂模式 建造者模式 结构型 适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式 行为型 观察者模式 迭 ...

  6. ArcGIS API for JavaScript开发环境搭建及第一个实例demo

    原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...

  7. 让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)

    Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要 ...

  8. 解决C#程序只允许运行一个实例的几种方法详解

    解决C#程序只允许运行一个实例的几种方法详解 本篇文章是对C#中程序只允许运行一个实例的几种方法进行了详细的分析介绍,需要的朋友参考下 本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运 ...

  9. 解决C# WINFORM程序只允许运行一个实例的几种方法详解

    要实现程序的互斥,通常有下面几种方式,下面用 C# 语言来实现: 方法一: 使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例. 把program.cs文件里的Main()函数改为如下代码: u ...

随机推荐

  1. ujmp使用心得

    1)对矩阵转置运算时: Matrix test2 = oneMatrix.transpose(); Matrix test2 = oneMatrix.transpose(Ret.LINK); Matr ...

  2. freedom isn't free

    财务自由(除去房和车) 第一阶段: 个人存款达到50万以上 第二阶段 个人存款100~200万 第三阶段 个人存款400万以上 第三阶段以上才能算实现了相对较好的财务自由!come on , boys ...

  3. RxJava 1.x 理解-3

    在 RxJava 1.x 理解-1 中,我们说到了RxJava的简单用法,但是这还远远不够,因为 输入的数据 ---> 被监听者(订阅源)对这些数据进行操作,或者执行响应的处理 --> 产 ...

  4. Bitcoin 比特币, LTC(litecoin)莱特币,

    1.挖掘机   http://asicme.com/index 2.官方:  http://bitcoin.org/zh_CN/ =============== 1\  最好的比特币资讯网站   ht ...

  5. PostgreSQL配置文件--WAL

    3 WAL WRITE AHEAD LOG 3.1 Settings 3.1.1 fsync 字符串 默认: fsync = on 开启后强制把数据同步更新到磁盘,可以保证数据库将在OS或者硬件崩溃的 ...

  6. virtualenv、virtualenvwrapper安装和使用;Mac os的特殊性

    [sudo] pip install virtualenv 或者[sudo] pip3 install virtualenv [sudo]可用可不用 pip/pip3 install virtuale ...

  7. iOS:Xcode中SVN不能提交CocoaPods中的.a文件的解决方法

    不能提交.a文件, 这个与SVN的配置有关, 其实与xcode倒没有关系. 解决方法: 1. 打开终端,  在命令行中输入: vi ~/.subversion/config  来打开配置文件.2. 然 ...

  8. sublime 插件cssrem安装及配置

    CSSREM CSSREM 是一个CSS的 px 值转 rem 值的Sublime Text3自动完成插件.先来看看插件的效果: 一个CSS的px值转rem值的Sublime Text 3自动完成插件 ...

  9. vue第三方ui使用

    举个例子. http://git.oschina.net/tianyong/we-vue 假如要在项目中使用这套ui. npm npm install we-vue -S 直接安装就行了.不需要下载源 ...

  10. Node.js abaike图片批量下载Node.js爬虫1.00版

    这个与前作的差别在于地址的不规律性,需要找到下一页的地址再爬过去找. //====================================================== // abaik ...