简体   繁体   English

如何在JavaScript中合并具有不同结构的两个对象

[英]How to merge two objects with different structure in javascript

I Have two objects with different structure, trying to merge this two objects with matched data based on a key value, and make a new object with complete data from object1 and object2. 我有两个具有不同结构的对象,试图将这两个对象与基于键值的匹配数据合并,并使用来自object1和object2的完整数据创建一个新对象。

my Object1 我的对象1

{  
   "schedule":{  
      "onward":{  
         "journey":[  
            {  
               "trips":[  
                  {  
                     "origin":{  
                        "airportCode":"AMS"
                     },
                     "destination":{  
                        "airportCode":"BCN"
                     },
                     "FlightNumber":"KL1665"
                  }
               ]
            },
            {  
               "trips":[  
                  {  
                     "origin":{  
                        "airportCode":"AMS"
                     },
                     "destination":{  
                        "airportCode":"BCN"
                     },
                     "FlightNumber":"MF9343"
                  }
               ]
            }
         ]
      }
   }
}

object 2 对象2

{  
   "flights":[  
      {  
         "flightNumber":"KL1665",
         "price":223,
         "available":10
      },
      {  
         "flightNumber":"KL112",
         "price":223,
         "available":10
      },
      {  
         "flightNumber":" KL112",
         "price":223,
         "available":10
      }
   ]
}

i Would like to merge "price" and "available" to object which matches with "flightNumber" and create a new object with all data. 我想将“价格”和“可用”合并到与“ flightNumber”匹配的对象,并创建一个包含所有数据的新对象。

I have tried to use loadash and underscore but couldnt figure it. 我试图使用loadash和下划线,但无法弄清楚。 Help would be great, Thank in Advance. 提前谢谢您的帮助。

2 simple forEach will do it:- 2个简单的forEach可以做到:

flights.flights.forEach(function(e, i) {
  schedule.schedule.onward.journey.forEach(function(e2, i2) {
    if (e.flightNumber == e2.trips[0].FlightNumber) {
      e2.trips[0] = $.extend(e, e2.trips[0]);
    }
  });
});

Working example: 工作示例:

 var schedule = { "schedule": { "onward": { "journey": [{ "trips": [{ "origin": { "airportCode": "AMS" }, "destination": { "airportCode": "BCN" }, "FlightNumber": "KL1665" }] }, { "trips": [{ "origin": { "airportCode": "AMS" }, "destination": { "airportCode": "BCN" }, "FlightNumber": "MF9343" }] }] } } }; var flights = { "flights": [{ "flightNumber": "KL1665", "price": 223, "available": 10 }, { "flightNumber": "KL112", "price": 223, "available": 10 }, { "flightNumber": " KL112", "price": 223, "available": 10 } ] }; flights.flights.forEach(function(e, i) { schedule.schedule.onward.journey.forEach(function(e2, i2) { if (e.flightNumber == e2.trips[0].FlightNumber) { e2.trips[0] = $.extend(e, e2.trips[0]); } }); }); console.log(schedule); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM