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对象,主要有以 ...
随机推荐
- 170530、java 迭代hashmap常用的三种方法
@SuppressWarnings("rawtypes") public class HashMapDemo { //hashMap遍历 public static void ma ...
- SpringBoot实现热加载方式
一. spring-boot-devtools方式1.在pom.xml中加入以下代码: 2.标识红线的地方加上 3.在设置里面加上自动编译 4.shift+ctrl+alt+/ 这样就可以了! 二.s ...
- 更快写入的落脚点不是线程数而是mysql连接数 对数据库 批处理 批写入
批提交mysql 单线程的批提交 nohup python fromRedisoToMysqlSingleThreadOneConnBatchInsert.py 100 10.24.192.192 ...
- code sandbox & mlflow
https://codesandbox.io/ https://www.jianshu.com/p/d70b25bf3cf4 https://my.oschina.net/u/2306127/blog ...
- 比特币 BTC本地测试节点
BTC本地测试节点 #环境 ubuntu 16.4 #客户端安装 #下载页面 #https://bitcoin.org/zh_CN/download cd /opt/ wget https://bit ...
- sailsjs入门到精通(一)
sailsjs 官方网站http://sailsjs.com/ 中文网站: http://sailsdoc.swift.ren/ 1 全局安装sails npm install sails@bet ...
- idea一个类中,各个修饰符的符号表示
1: 2:
- Linux下编译安装PHP扩展memcached
[安装 libevent] $ tar zxvf libevent-2.0.20-stable.tar.gz $ cd libevent-2.0.20-stable/$ ./configure --p ...
- Selenium之firefox浏览器的启动问题及解决
启动firefox报错如下: rg.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 ...
- Atcoder CADDi 2018 Solution
C - Product and GCD Solved. 题意: 给出$n个数$的乘积,求$这n个数$的最大的可能是GCD 思路: 分解质因子,那么$每个质因子的贡献就是其质因子个数/ n的乘积$ #i ...