请问大拿们,如何把json1优雅简便的重构成json2呢,具体就是想要把每个menuDate和dinnerTime同时相等的元素分为一组,重构一个json出来。可以使用jquery的。
json1:
[
{
"menuDate": 1,
"dinnerTime": "0",
"num": 5
},
{
"menuDate": 1,
"dinnerTime": "0",
"num": 1
},
{
"menuDate": 1,
"dinnerTime": "1",
"num": 3
},
{
"menuDate": 2,
"dinnerTime": "0",
"num": 3
},
{
"menuDate": 2,
"dinnerTime": "0",
"num": 6
}
]
json2:
[
{
"menuDate": 1,
"dinnerTime": "0",
"value": [
{
"menuDate": 1,
"dinnerTime": "0",
"num": 5
},
{
"menuDate": 1,
"dinnerTime": "0",
"num": 1
}
]
},
{
"menuDate": 1,
"dinnerTime": "1",
"value": [
{
"menuDate": 1,
"dinnerTime": "1",
"num": 3
}
]
},
{
"menuDate": 2,
"dinnerTime": "0",
"value": [
{
"menuDate": 2,
"dinnerTime": "0",
"num": 3
},
{
"menuDate": 2,
"dinnerTime": "0",
"num": 6
}
]
}
]
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我先说说思路,首先json1 肯定需要遍历:
如上,假设现在遍历到json1 的第
i个元素,如果json2 中没有找到与之相同的menudate和dinnerTime,说明这是json1 第一次遇到这个两个值,就为json2 新增一个元素:如果找到相同的呢?说明之前已经添加过了,假设json2 中这个相同的元素索引号为
j,那么:思路有了,现在要解决两个问题:
怎么判断json2 中是否存在某个元素与json1Elem 有相同的
menudate和dinnerTime?假设找到拥有相同的
menudate和dinnerTime的元素,这个元素的索引号j是多少呢?我的做法是新建一个
keyMap对象,menudate和dinnerTime的值结合在一起作为keyMap的key,这个key是判断是否相同的唯一的依据;然后key的值是上面提到的j。整个例子的代码是:上面的代码中,
elemKey是menudate和dinnerTime的结合,如果这个键存在,说明之前已经添加过相同menudate和dinnerTime的json1 元素了;如果不存在,那就加一下;这里我把
json2.length - 1的值赋给keyMap[elemKey],这个值正是j的值(刚刚push 进去),因此:就是
新建一个json数组a,遍历json1,如果在a中有相同的menudate,dinnertime 组合,则把他们以json的格式存进进数组,否则不存,这样a中存进的都是menudate和dinnertime不一样的组合,这将是判定json2不同分组的重要依据,如果a的长度为2,那么经过处理后的json2只会有两个,剩下来就是便利筛选了,手机手打 若有不对之处,望莫喷
建新对象 jnew={1_2:[],0_1:[]},1_2是 menuDate与dinnerTime的组合,在遍历原json时,根据 menuDate与dinnerTime组合成key,存入jmap,存入时判断一下是新值直接存入,已经有值则将值push入相应数组。遍历完成后,很容易根据jmap生成新json。不知道说明白没,请看代码,result即为所最后结果,在node.js平台测试正确:
那个newArr就是你想要的json2
中的思路就是这样