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对象,主要有以 ...
随机推荐
- yii2.0 如何按需加载并管理CSS样式及JS脚本
链接:http://www.yiichina.com/tutorial/399 (注:以下为Yii2.0高级应用测试) Yii2.0对于CSS/JS 管理,使用AssetBundle资源包类. 视图如 ...
- Redis讲解
buffer 缓冲 用于写 cache 缓存 用于读 redis 支持持久化 安装redis yum -y install redis 配置文件/etc/redis.conf 是否在后台运行 ...
- mysql-blog
https://www.cnblogs.com/zhanht/p/5450559.html
- python之轮询、长轮询、websocket
轮询 ajax轮询 ,ajax轮询 的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息. 1.后端代码 from flask import Flask,render_templat ...
- OA项目_环境搭建
OA项目现在要做成微服务,用的框架是springboot,所用的编程工具是idea,maven,做为一个程序员最关心的就是我需要在那个架包中编写代码,我们只需关注domain,repository,s ...
- Python: 复数的数学运算
写的最新的网络认证方案代码遇到了一个难题,唯一的解决办法就是使用复数空间,需要使用复数来执行一些计算操作. 复数可以用使用函数complex(real, imag) 或者是带有后缀j 的浮点数来指定. ...
- 项目中使用protobuf 3.0
protocol buffer从3.0 原生的compiler支持c++,Java,Python,Go,Ruby,JavaNano,JavaScript,Objective-C,C#,PHP这篇文章作 ...
- 2018-2019-1 20189215 《Linux内核原理与分析》第七周作业
<庖丁解牛>第六章书本知识总结 操作系统内个实现操作系统的三大管理功能:进程管理.内存管理.文件系统.分别对应<操作系统原理>中最重要的3个抽象概念是进程.虚拟内存和文件. L ...
- Cooperation.GTST团队第三周项目总结
项目进展 这周我们仍然在学习使用博客园的相关接口,页面的一个基本模块已经搭建出来了,但是页面整体效果还没有完全做出来.另外,我们在使用其他的APP时留意到许多APP都使用上拉加载和下拉刷新的效果,所以 ...
- ubuntu16.04+七彩虹GTX1060的NVIDIA驱动+Cuda8.0+cudnn5.1+tensorflow+keras搭建深度学习环境【学习笔记】【原创】
平台信息:PC:ubuntu16.04.i5.七彩虹GTX1060显卡 作者:庄泽彬(欢迎转载,请注明作者) 说明:参考了网上的一堆的资料搭建了深度学习的开发环境,下班在宿舍折腾了好几个晚上才搞定,写 ...