The code which gets expected array:
var a = [{id: 1, name:"SFO"}, {id:2, name:"ATL"}];
var b = [{number: 1, sourceId:1, destinationId:2}, {number:2, sourceId:2, destinationId:1}];
var arr = [];
for(var i=0; i<b.length; i++){
arr.push({
source: {name: findName(b[i].sourceId, a) },
destination: {name: findName(b[i].destinationId, a) }
});
}
function findName(nr, a){
for(var i=0; i<a.length; i++){
if(nr==a[i].id){
return a[i].name;
}
}
}
//[{source: {name: "SFO"}, destination: {name: "ATL"}}, {source: {name:"ATL"}, destination: {name: "SFO"}}]
console.log(arr);
Getting expected array using map and filter:
var a = [{id: 1, name:"SFO"}, {id:2, name:"ATL"}];
var b = [{number: 1, sourceId:1, destinationId:2}, {number:2, sourceId:2, destinationId:1}];
var arr = b.map(function(obj){
return {
source: { name: a.filter(function(obj2){ if(obj2.id==obj.sourceId) return obj2.name; })[0].name },
destination: { name: a.filter(function(obj2){ if(obj2.id==obj.destinationId) return obj2.name; })[0].name }
};
});
//[{source: {name: "SFO"}, destination: {name: "ATL"}}, {source: {name:"ATL"}, destination: {name: "SFO"}}]
console.log(arr);
reduce?mapandfiltershould suffice