基于javascript中的条件合并两个嵌套的JSON对象
Merging two nested JSON objects based on conditionals in javascript
我试图弄清楚如何合并两个JSON对象,并根据条件创建合并的对象。
我想循环leadlistArray,获取规则。id对应每个条目,并将其与rulesArray进行匹配。最后的结果应该是finalArray。
leadlistArray = {
"status": "success",
"data": {
"leadlists": [
{
"rules": [
{
"$oid": "53866d4d1fd21c3cc41f52da"
}
],
"name": "List 1: only general rule"
},
{
"rules": [
{
"$oid": "53866d4d1fd21c3cc41f52da"
},
{
"$oid": "53866d9c1fd21c3cc79bf7ce"
},
{
"$oid": "53866d9c1fd21c3cc79bf2cd"
}
],
"name": "List 2: general and web-based rule"
},
{
"rules": [
{
"$oid": "53866d9c1fd21c3cc79bf7ce"
}
],
"name": "List 3: only web-based rule"
}
]
}
}
规则阵列:
rulesArray = {
"status": "success",
"data": {
"rules": [
{
"description": "optimizely no!",
"start_time": "",
"values": [
"optimizely"
],
"end_time": "",
"operator": "",
"_id": {
"$oid": "53866d4d1fd21c3cc41f52da"
},
"type": 0,
"condition": 1
},
{
"description": "google_plus no!",
"start_time": "",
"values": [
"google_plus"
],
"end_time": "",
"operator": "",
"_id": {
"$oid": "53866d9c1fd21c3cc79bf2cd"
},
"type": 1,
"condition": 1
},
{
"description": "google_plus yes!",
"start_time": "",
"values": [
"google_plus"
],
"end_time": "",
"operator": "",
"_id": {
"$oid": "53866d9c1fd21c3cc79bf7ce"
},
"type": 1,
"condition": 0
}
]
}
}
对于每个列表,finalArray应该按照规则类型对规则描述进行分组:
finalArray = [
{'name': 'List 1: only general rule'
,'rules':
{0: [
{'description': 'optimizely no!'}
]}
},
{'name': 'List 2: general and web-based rule'
,'rules':
{0: [
{'description': 'optimizely no!'}
], 1: [
{'description': 'google_plus yes!'},
{'description': 'google_plus no!'}
]}
},
{'name': 'List 3: only web-based rule'
,'rules': {
1: [
{'description': 'google_plus yes!'}
]}
}
]
试试这个http://jsfiddle.net/eN52v/
var rules = rulesArray.data.rules
.reduce(function(acc, item){
return acc[item._id.$oid] = {
description: item.description,
type: item.type}, acc;
}, {}), //cache rules by id to avoid array lookups.
finalArray = leadlistArray.data.leadlists.map(function(item) {
return {
name: item.name,
rules: item.rules.reduce(function(acc, rule){ //Why not an array?
var ruleDesc = rules[rule.$oid],
type = ruleDesc.type;
(acc[type] || (acc[type] = [])).push({description: ruleDesc.description});
return acc;}, {})
}});
相关文章:
- 如何对两个嵌套对象进行排序
- 多个嵌套元素上的jQuery.text('')
- 如何在同一个表中显示这两个嵌套ng重复的元素
- 展平多个嵌套层次结构数组-d3.js
- 合并两个嵌套的JSON数组
- 如何获得"src”;来自多个嵌套iframe源的属性
- 单击两个嵌套<李>s
- 如何在 C# 中使用多个嵌套 JSON 对象创建数据表
- 从节点中的多个嵌套回调中返回值
- 如何使用jQuery包装x个嵌套项目
- 对两个嵌套的ng重复进行角度自定义过滤
- AngularJS$q中的两个嵌套线程是否可以在没有$q.dedefe()的情况下分叉和连接
- 合并两个嵌套对象,并在侧面连接数组
- 如何通过两个嵌套的匿名函数(一个带有超时的事件处理程序)传递变量
- 在两个嵌套循环中同步调用
- 如何为两个嵌套属性保存id
- 两个嵌套的for/循环,没有重复的对
- 基于javascript中的条件合并两个嵌套的JSON对象
- JS基于两个嵌套元素数组的比较返回数组
- Jquery的两个api调用在两个嵌套的$中检索不同的动态元素.每一个循环