js将json格式的list转换为按某个字段分组的map数组
这几天做的微信公众号项目中,出现了需要将list分组显示的需求,解决方法如下
var data = [{
	"id": "32b80b76-a81e-4545-8065-1e7c57180801",
	"userId": "qy-uid",
	"qcCode": "140403123001",
	"packageInfo": "秋雨包裹一",
	"tjTime": "2017-12-21 10:38:31.0",
	"pdTime": "2017-12-21 11:05:08.0",
	"shTime": "2017-12-29 10:17:06.0",
	"addUserId": "qy-uid",
	"pdUserId": "qy-uid",
	"shUserId": "qy-uid",
	"pdState": "00",
	"shState": "00",
	"packageState": "00",
	"deleteFlg": "00",
	"uname": "秋雨",
	"uphone": "18151449650"
}, {
	"id": "9ee2e7f0-0f7a-44e2-b7cc-577d21eb1142",
	"userId": "recorde-test-for-qy-do-not-delete",
	"qcCode": "queen-qcCode003",
	"packageInfo": "绿箭侠包裹三",
	"tjTime": "2017-12-21 10:46:08.0",
	"tijiaoTime": "2017-12-21 10:46:27.0",
	"shTime": "2017-12-29 10:16:59.0",
	"addUserId": "recorde-test-for-qy-do-not-delete",
	"tjUserId": "recorde-test-for-qy-do-not-delete",
	"shUserId": "qy-uid",
	"tjState": "01",
	"shState": "00",
	"packageState": "00",
	"deleteFlg": "00",
	"uname": "奥利弗 ",
	"uphone": "1666666666"
}, {
	"id": "a35b31b6-b974-4ca6-a4b6-28db3dae9814",
	"userId": "recorde-test-for-qy-do-not-delete",
	"qcCode": "queen-qcCode002",
	"packageInfo": "绿箭侠包裹二",
	"tjTime": "2017-12-21 10:45:44.0",
	"tijiaoTime": "2017-12-21 10:46:27.0",
	"pdTime": "2017-12-21 11:05:26.0",
	"shTime": "2017-12-29 10:17:02.0",
	"addUserId": "recorde-test-for-qy-do-not-delete",
	"tjUserId": "recorde-test-for-qy-do-not-delete",
	"pdUserId": "qy-uid",
	"shUserId": "qy-uid",
	"tjState": "01",
	"pdState": "00",
	"shState": "00",
	"packageState": "00",
	"deleteFlg": "00",
	"uname": "奥利弗 ",
	"uphone": "1666666666"
}, {
	"id": "d265b81f-4459-4986-bce7-8ef6f4ff3751",
	"userId": "qy-uid",
	"qcCode": "140403123002",
	"packageInfo": "秋雨包裹二",
	"tjTime": "2017-12-21 10:38:47.0",
	"pdTime": "2017-12-21 11:05:13.0",
	"addUserId": "qy-uid",
	"pdUserId": "qy-uid",
	"pdState": "00",
	"packageState": "00",
	"deleteFlg": "00",
	"uname": "秋雨",
	"uphone": "18151449650"
}, {
	"id": "f32fc473-4e2c-4357-b0bb-6fb44eb9eb74",
	"userId": "recorde-test-for-qy-do-not-delete",
	"qcCode": "queen-qcCode001",
	"packageInfo": "绿箭侠包裹一",
	"tjTime": "2017-12-21 10:45:27.0",
	"tijiaoTime": "2017-12-21 10:46:27.0",
	"pdTime": "2017-12-21 11:05:20.0",
	"addUserId": "recorde-test-for-qy-do-not-delete",
	"tjUserId": "recorde-test-for-qy-do-not-delete",
	"pdUserId": "qy-uid",
	"tjState": "01",
	"pdState": "00",
	"packageState": "00",
	"deleteFlg": "00",
	"uname": "奥利弗 ",
	"uphone": "1666666666"
}, {
	"id": "f830543a-ae54-49ee-9646-b29e81c50d25",
	"userId": "qy-uid",
	"qcCode": "140403123003",
	"packageInfo": "秋雨包裹三",
	"tjTime": "2017-12-21 10:39:00.0",
	"addUserId": "qy-uid",
	"packageState": "00",
	"deleteFlg": "00",
	"uname": "秋雨",
	"uphone": "18151449650"
}];
                    var map = {},    //临时记录根据某字段分组的临时键值对变量,用来记录是否已经存在该uname
                        dest = [];   //最终输出数组
                    for(var i = 0; i < data.length; i++){    //遍历list数据
                        var ai = data[i];    //ai代表list中的某一项
                        if(!map[ai.uname]){  //临时键值对变量中不存在此键
                            dest.push({     //将此数据以json对象格式放到数组中{key1:value1,key2:value2},key1是分组的字段,key2是list中的某一条数据
                                uname: ai.uname,
                                data: [ai]
                            });
                            map[ai.uname] = ai;    //将未加入map的key放入,这样下次map[ai.uname]就会返回true,map用处到此为止。
                        }else{   //临时键值对中有此键
                            for(var j = 0; j < dest.length; j++){    //遍历list
                                var dj = dest[j];    //结果数组中某一项数据
                                if(dj.uname == ai.uname){    //结果数据中此dest[key1]的值和该list[i].uname的值相等时
                                    dj.data.push(ai);    //把list[i]也放入该dest[key1].data中去
                                    break;
                                }
                            }
                        }
                    }
                    console.info(dest);
js将json格式的list转换为按某个字段分组的map数组的更多相关文章
- JSon_零基础_006_将JSon格式的字符串转换为Java对象
		需求: 将JSon格式的字符串转换为Java对象. 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“name.values”集合, 通过get(key ... 
- arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
		arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ... 
- python 使用eval() 可以将json格式的数据,转换为原始数据
		使用python 自带的函数可以将json 格式的数据(也就是字符串)转换为原始格式的数据, 当使用json.loads()无法将json格式的数据转换为原始数据(存在多层各种格式类型数据的嵌套), ... 
- 如何利用fastjson将JSON格式的字符串转换为Map,再返回至前端成为js对象
		//注意,这里的jsonStr是json格式的字符串,里面如果遇到双引号嵌套双引号的,一般是嵌套的双引号经过转义 // \",假如有这样的一个场景,这些字符串里面有需要的css样式的j ... 
- js 如何把JSON格式的字符串转换为JSON对象
		直接用eval函数.例:var str1 = '{ "url": "www.51qdq.com", "name": "js&quo ... 
- js中JSON格式数据的转化
		JSON.parse(STRING) => OBJECT JSON.stringify(OBJECT) => STRING 
- js传递json格式对象到服务器
		var message = new Object();message.event = "test";message.params = new Object();message.pa ... 
- Json格式的字符串转换为正常显示的日期格式
		//返回自定义格式日期: 2015-07-17 13:53:37function ChangeDateFormat(jsondate) { jsondate = jsondate.replace(&q ... 
- 8. js中json格式解析
		var doc = O_PARAMETER.FJSonStr;(doc为:{"items":[],"nextId":0}) //1.先转为json对象,主要有以 ... 
随机推荐
- C#操作word之插入图片
			假如我们导出一份简历到word文档,那势必可能要同时导出我们包含的简历,下面就来试一下如何和通过C#代码,将图片插入到word文档中. 为了简便起见,就简单一点.类似下面这样的 姓名 张三 照片 ... 
- centos 搭建php环境
			安装Apache1.安装yum -y install httpd2.开启apache服务systemctl start httpd.service3.设置apache服务开机启动systemctl e ... 
- 使用linuxbridge + vlan网络模式
			#openstack pike 使用 linuxbridge + vlan openstack pike 集群高可用 安装部署 汇总 http://www.cnblogs.com/elvi/p/76 ... 
- 我希望知道的关于Django的11件事(转)
			英文原文:https://medium.com/cs-math/f29f6080c131 译文:http://my.oschina.net/chenlei123/blog/270672 两年前, 我开 ... 
- sql 用xml方式插入数据乱码问题解决方法
			sql 使用存储过程 参数为xml字符串 xml不要写编码,如下 <?xml version=\"1.0\" ?><root>数据字符串</root& ... 
- 使用Ajax验证用户是否已存在
			在服务器端使用Servlet,里面在集合里存了几个字符串,没有对数据库操作. 前台input页面和Ajax验证: <%@ page language="java" conte ... 
- java 的==和equals的区别(二)
			java 的==和equals的区别 java 的==和equals的区别 ==通常表明引用的是同一个东西(引用的地址相同),equals通常表明两个对象的内容相同(值相同) ------------ ... 
- IBM究竟是一家怎样的公司
			每次被问到这样的“简单”问题,我都很纠结: 这家公司,从创始至今已经积累了几十万种技术(2015年蝉联专利排行榜23年之久,仅2015年专利数7355项),开发了上万种产品(从银行的交易系统,到航空的 ... 
- python中format函数
			python中format函数用于字符串的格式化 通过关键字 1 print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 2 grade = {'nam ... 
- MySQL备份与恢复-mysqldump备份与恢复
			这片博文主要用来介绍MySQL的备份与恢复: MySQL的备份形式可以分为如下几种: 热备----即不停机备份 冷备----需要关闭MySQL,然后备份其数据文件.(停机备份一般是直接拷贝其datad ... 
