2016-10-03 4 views
0

У меня есть два объекта с разной структурой, которые пытаются объединить эти два объекта с согласованными данными на основе значения ключа и создать новый объект с полными данными из объектов1 и объекта2.Как слить два объекта с разной структурой в javascript

моего Object1

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

объект 2

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

я хотел бы объединить «цену» и «доступную» на объект, который соответствует с «самалётом» и создать новый объект со всеми данными ,

Я попытался использовать loadash и подчеркивание, но не смог его понять. Помогите было бы здорово, спасибо в Advance.

+0

окончательный ожидаемый объект '{ "графиков": { "onwardSchedules": { «поездки»: [{«полеты»: [{«происхождение»: {«код аэропорта»: «AMS»}, «пункт назначения»: {«код аэропорта»: «BCN»}, «marketingFlightNumber»: «KL1665», «pr лед ": 223," доступно ": 10}] }, {" полеты ": [{" origin ": {" airportCode ":" AMS "}," пункт назначения ": {" код аэропорта ":" BCN " } , "marketingFlightNumber": "MF9343" }] }]} }} ' – thechoosenone

+0

вам просто нужно сделать это вручную. поместите данные с полетов, которые вы хотите в расписание. Существует не «короткое сокращение» для чего-то определенного. – bryan60

+0

@ bryan60 Я получаю эти данные динамически от Ajax, поэтому обновление вручную невозможно. – thechoosenone

ответ

2

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]); 
    } 
    }); 
}); 

Рабочий пример:

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>

+0

Большое спасибо за ответ. Можете ли вы предложить способ, которым я могу получить конечный объект в той же структуре объекта 1 – thechoosenone

+0

Просто измените 'if'. Я обновляю ответ. – BenG

Смежные вопросы