Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中基于条件合并两个嵌套JSON对象_Javascript_Json_Underscore.js - Fatal编程技术网

在javascript中基于条件合并两个嵌套JSON对象

在javascript中基于条件合并两个嵌套JSON对象,javascript,json,underscore.js,Javascript,Json,Underscore.js,我试图找出如何合并两个JSON对象并基于条件创建一个合并对象 我想循环使用leadlistArray,获取每个条目的rules.id,并将其与rulesArray进行匹配。最终结果应该是最终结果 leadlistArray = { "status": "success", "data": { "leadlists": [ { "rules": [ { "$oid": "53866d4d1fd21c3cc41f52da" } ],

我试图找出如何合并两个JSON对象并基于条件创建一个合并对象


我想循环使用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;IArray.prototype.map
.reduce
,此代码将无法在旧版IE中运行。对于polifill,欢迎查看。请注意,如果没有polyfils for
Array.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;}, {})    
        }});