js 根据日期将json重新分组

Jameszhanc 2019-05-11 06:46:50
这是我代码,不知道哪里错了,总是会重复打印

思路:data数组第0项直接push(birthday+detailList)整个,但从第1项就要开始去newArr比较birthday,如果birthday相同,就只用push(detailList),如果不同就push { birthday+detailList }



var data = [
{"name": "小明","age": "4","birthday": "5-1"},
{"name": "小黄","age": "4","birthday": "5-1"},
{"name": "小红","age": "4","birthday": "5-3"},
]

//[希望得到]
// var newArr = [
// {
// "birthday":"5-1",
// "detailList":"[ {'name':'小明','age':'4'} , {'name':'小黄','age':'4'}]"
// },
// {
// "birthday":"5-3",
// "detailList":"[ {'name':'小红','age':'4'}]"
// }
// ];


var arr = []; //存放新数组
for (var i = 0; i < data.length; i++) {
//读取每条数据的日期
var resBirthday = data[i].birthday;

//当日期相同,只要传这个
var valDetailList = {
"name": data[i].name,
"age": data[i].age
}

//当日期没有相同的,就新建一个Item
var valItem = {
"birthday": '',
"detailList": []
}
valItem.birthday = resBirthday;
valItem.detailList.push(valDetailList);

//第0个不需要比较
if (i == 0) {
arr.push(valItem);
}
//第1个就要开始找新数组arr相同的日期
else{
for (var k = 0; k < arr.length; k++) {
if (resBirthday == arr[k].birthday) {
arr[k].detailList.push(valDetailList);
}
else{
arr.push(valItem);
}
}
}
}
console.log(arr);
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jameszhanc 2019-05-11
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:

var data = [
			{"name": "小明","age": "4","birthday": "5-1"},
			{"name": "小黄","age": "4","birthday": "5-1"},
			{"name": "小红","age": "4","birthday": "5-3"},
		]

		//[希望得到]
		// var newArr = [
		// 	{
		// 		"birthday":"5-1",
		// 		"detailList":"[ {'name':'小明','age':'4'} , {'name':'小黄','age':'4'}]"
		// 	},
		// 	{
		// 		"birthday":"5-3",
		// 		"detailList":"[ {'name':'小红','age':'4'}]"
		// 	}
		// ];


		var arr = []; //存放新数组
		for (var i = 0; i < data.length; i++) {
			//读取每条数据的日期
			var resBirthday = data[i].birthday;

			//当日期相同,只要传这个
			var valDetailList = {
				"name": data[i].name,
				"age": data[i].age
			}

			//当日期没有相同的,就新建一个Item
			var valItem = {
				"birthday": '',
				"detailList": []
			}
			valItem.birthday = resBirthday;
			valItem.detailList.push(valDetailList);
			var f = false;
			for (var k = 0; k < arr.length; k++) {
				if (resBirthday == arr[k].birthday) {
					arr[k].detailList.push(valDetailList);
					f = true;
					break;
				}
			}
			if(!f){
				arr.push(valItem);
			}
		}
		console.log(arr);

谢谢!!我想了很久都没想到!!!
Jameszhanc 2019-05-11
  • 打赏
  • 举报
回复
谢谢!!!!我想了很久都没想到!!!
天际的海浪 2019-05-11
  • 打赏
  • 举报
回复

var data = [
			{"name": "小明","age": "4","birthday": "5-1"},
			{"name": "小黄","age": "4","birthday": "5-1"},
			{"name": "小红","age": "4","birthday": "5-3"},
		]

		//[希望得到]
		// var newArr = [
		// 	{
		// 		"birthday":"5-1",
		// 		"detailList":"[ {'name':'小明','age':'4'} , {'name':'小黄','age':'4'}]"
		// 	},
		// 	{
		// 		"birthday":"5-3",
		// 		"detailList":"[ {'name':'小红','age':'4'}]"
		// 	}
		// ];


		var arr = []; //存放新数组
		for (var i = 0; i < data.length; i++) {
			//读取每条数据的日期
			var resBirthday = data[i].birthday;

			//当日期相同,只要传这个
			var valDetailList = {
				"name": data[i].name,
				"age": data[i].age
			}

			//当日期没有相同的,就新建一个Item
			var valItem = {
				"birthday": '',
				"detailList": []
			}
			valItem.birthday = resBirthday;
			valItem.detailList.push(valDetailList);
			var f = false;
			for (var k = 0; k < arr.length; k++) {
				if (resBirthday == arr[k].birthday) {
					arr[k].detailList.push(valDetailList);
					f = true;
					break;
				}
			}
			if(!f){
				arr.push(valItem);
			}
		}
		console.log(arr);

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧