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对象,主要有以 ...
随机推荐
- Tomcat部署静态网站
公司架构:公司架构有5套,主机都是阿里云的ecs,基本上都是SLB做前端负载均衡,后端Tomcat,后接RDS数据库. 业务需求:需要将公司现有网站指向一个二级域名,建立一个新的静态网站,将域名指向现 ...
- __FILE__ 与 $_SERVER['SCRIPT_FILENAME']的区别
二者都表明了本文件的绝对路径,区别在于,$_SERVER['SCRIPT_FILENAME']指向当前执行脚本的绝对路径:__FILE__指向当前文件的绝对路径:也就是写在哪个文件里就是哪里. 例子: ...
- TA-Lib中文文档(二):talib安装
安装 使用pip安装 PyPI: $ pip install TA-Lib Or checkout the sources and run setup.py yourself: $ python se ...
- vue.js(四)
由于组件内容太多又特别关键,我决定在官网教程的基础上,加上自己的理解,针对每个内容详细记录一下 1.注册组件 ①全局注册 //首先创建组件 Vue.component('blog-post', { ...
- IOS使用Core-Plot画折线图
关于Core-Plot的配置.大家能够參考我的上一篇博客:http://1.wildcat.sinaapp.com/?p=99 版权全部.转载请注明原文转自:http://blog.csdn.net/ ...
- C# 反双曲余弦函数
反双曲余弦函数的定义是: T1 = Math.Log(t + Math.Sqrt(t * t - 1)); 1. 叉乘(cross product),也叫向量的外积.向量积.顾名思义,求下来的结果是一 ...
- WMS学习笔记:2.WMS解析
WMS 定义了三个操作,分别是:GetCapabilities,GetMap和GetFeatureInfo.其中,GetFeatureInfo是可选的.本条款规定了在超文本传输协议(HTTP)分布式计 ...
- github使用方法
1:fork别人的项目后,更新别人最新的提交 https://blog.csdn.net/qq1332479771/article/details/56087333 2:在idea中push工程 ...
- KS检验学习[转载]
转自:https://wenku.baidu.com/view/ccfa573a3968011ca30091d6.html https://www.cnblogs.com/arkenstone/p/5 ...
- Sparsity稀疏编码(一)
稀疏编码来源于神经科学,计算机科学和机器学习领域一般一开始就从稀疏编码算法讲起,上来就是找基向量(超完备基),但是我觉得其源头也比较有意思,知道根基的情况下,拓展其应用也比较有底气.哲学.神经科学.计 ...