2016-10-03 120 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

相关问题