2016-10-03 122 views
0

我想基於飛行鍵將兩個數組對象與不同的數組對象組合。
如果該值匹配a2,我想將它與a1合併並創建新的數組。
a1中的所有數據必須在那裏,匹配的航班信息必須從a2增加到a1

請幫我解決這個問題。如何組合兩個數組對象如果兩個數組中的鍵值匹配

a1 = [{'flight':'AF1223','oring':'CDF', 'Dest':'HNG'},{'flight':'XG23','oring':'HYD', 'Dest':'MMZ'},{'flight':'PK145','oring':'XYZ', 'Dest':'PEK'}] 

a2 = [{'price':230,'avail':20,'flight':'AF1223'}, {'price':430,'avail':30,'flight':'DF43'},{'price':430,'avail':30,'flight':'XG23'} ] 

combine array = [{'flight':'AF1223','oring':'CDF', 'Dest':'HNG','price':230,'avail':20},{'flight':'XG23','oring':'HYD', 'Dest':'MMZ'},{'flight':'PK145','oring':'XYZ', 'Dest':'PEK','price':430,'avail':30,}] 
+2

你tryed的東西,或者只是訂購代碼? –

+1

這可能是重複的:http://stackoverflow.com/questions/7146217/merge-2-arrays-of-objects –

+0

@LouysPatriceBessette我是新來的編碼和試圖得到的手,與我的知識,我嘗試了幾次,但nt工作所以請求幫助 – thechoosenone

回答

1

您可以從數組2 ITO陣列1,像在兩個數組,如果匹配對象推迭代..

var a1 = [{'flight':'AF1223','oring':'CDF', 'Dest':'HNG'},{'flight':'XG23','oring':'HYD', 'Dest':'MMZ'},{'flight':'PK145','oring':'XYZ', 'Dest':'PEK'}]; 
 

 
var a2 = [{'price':230,'avail':20,'flight':'AF1223'}, {'price':430,'avail':30,'flight':'DF43'},{'price':430,'avail':30,'flight':'XG23'} ]; 
 

 
var result = a1.slice(0); 
 

 
for (var i = 0 ; i < result.length ; i++){ 
 
    for (var j = 0; j < a2.length ; j++){ 
 
    if (result[i].flight == a2[j].flight){ 
 
     result[i].price = a2[j].price; 
 
     result[i].avail = a2[j].avail; 
 
    } 
 
    }; 
 
}; 
 
console.log(result);

+3

也許'Object.assign(a,b)'會更接近想要的解決方案嗎? (或者任何其他合併兩個對象的方式)。當然,這會改變'a1',所以可以創建另一個數組,組合,隨後(在匹配上)'combined.push(Object.assign({},a ,b));' –

+0

@Lucas Costa,感謝您的幫助,但結果並不是我想要得到的結果,如果您看到示例第一個對象的組合數組將具有由組合組成的5個鍵值對a1和a2,因爲航班號匹配,第二個對象將只是3個鍵值對,因爲沒有航班號匹配。 – thechoosenone

+0

感謝您的建議@DawsonToth,我與你合作並根據Object.assign降低了未接受的答案。 –

0

以匹配所需的輸出,你可以做如下;

var a1 = [{'flight':'AF1223','oring':'CDF', 'Dest':'HNG'},{'flight':'XG23','oring':'HYD', 'Dest':'MMZ'},{'flight':'PK145','oring':'XYZ', 'Dest':'PEK'}], 
 
    a2 = [{'price':230,'avail':20,'flight':'AF1223'}, {'price':430,'avail':30,'flight':'DF43'},{'price':430,'avail':30,'flight':'XG23'}], 
 
result = a2.reduce((p,c) => (p[c.flight] && (p[c.flight] = Object.assign(p[c.flight],c)),p), a1.reduce((f,s) => (f[s.flight] = s,f),{})); 
 
console.log(result);

1

我給你一個完整的解決方案。

a = [ 
    {'id':'A','oring':'CDF', 'Dest':'HNG'}, 
    {'id':'B','oring':'HYD', 'Dest':'MMZ'}, 
    {'id':'C','oring':'XYZ', 'Dest':'PEK'}]; 

b = [ 
    {'id':'A','price':230,'avail':20,}, 
    {'id':'D','price':430,'avail':30}, 
    {'id':'B','price':430,'avail':30} ]; 

// put the object D into array a 
for(var i=0;i<b.length;i++) { 
    var idb = b[i].id; 
    var idnotfound = true; 
    a.forEach(function(rowofa) { 
    var ida = rowofa.id; 
    if(ida == idb) { 
     idnotfound = false; 
    } 
    }); 
    if(idnotfound){ 
    a.push(b[i]); 
    } 
}//for 
//console.log('aa=>>',a); 
//....................................... 

//Match ids and then put all in array a 

for(var i= 0;i<a.length;i++) { 
    var ida = a[i].id; 
    for(var j=0;j<b.length;j++) { 
    var idb = b[j].id; 
    if(ida == idb) { 
     a[i].avail = b[j].avail; 
     a[i].price = b[j].price; 
    }//if 
    } //for2 
}//for1 
console.log('aa=>',a); 

輸出將是

aa=> [ { id: 'A', oring: 'CDF', Dest: 'HNG', avail: 20, price: 230 }, 
     { id: 'B', oring: 'HYD', Dest: 'MMZ', avail: 30, price: 430 }, 
     { id: 'C', oring: 'XYZ', Dest: 'PEK' }, 
     { id: 'D', price: 430, avail: 30 } ] 
+0

歡迎來到Stack Overflow。不接受代碼的答案是不鼓勵的,因爲他們沒有解釋他們如何解決問題中的問題。考慮更新你的答案,以解釋它做了什麼,以及它如何解決問題 - 這不僅有助於OP,而且還有其他類似問題。請回顧[我如何寫出一個好的答案](https://stackoverflow.com/help/how-to-answer) – FluffyKitten

相關問題