在javascript中基于条件合并两个嵌套JSON对象
我试图找出如何合并两个JSON对象并基于条件创建一个合并对象在javascript中基于条件合并两个嵌套JSON对象,javascript,json,underscore.js,Javascript,Json,Underscore.js,我试图找出如何合并两个JSON对象并基于条件创建一个合并对象 我想循环使用leadlistArray,获取每个条目的rules.id,并将其与rulesArray进行匹配。最终结果应该是最终结果 leadlistArray = { "status": "success", "data": { "leadlists": [ { "rules": [ { "$oid": "53866d4d1fd21c3cc41f52da" } ],
我想循环使用leadlistArray,获取每个条目的rules.id,并将其与rulesArray进行匹配。最终结果应该是最终结果
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!'}
]}
}
]
试试这个
试试这个
“我想在leadlistArray中循环…”是什么让你停下来的?:)我尝试了这个方法,但在如何使用对象数组上的u2; intersect时遇到了问题:for(var I=0;I
Array.prototype.map
和.reduce
,此代码将无法在旧版IE中运行。对于polifill,欢迎查看。请注意,如果没有polyfils forArray.prototype.map
和.reduce
,此代码在旧版IE中无法运行。有关polifill,请查看_
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;}, {})
}});