Hola, estoy tratando de combinar dos matrices, pero ¿por qué el resultado solo muestra el nombre del personal y el resto no está definido?
let cuba2 = []; let cuba3 = []; let staff = [ {name:"tim", postcode:"68100",counter:0}, {name:"sam", postcode:"43500",counter:0}, {name:"apu", postcode:"55100",counter:0} ]; let cuba2 = [ {fsm:"111", postcode:"68100"}, {fsm:"222", postcode:"55555"}, {fsm:"333", postcode:"66666"} ]; cuba2.forEach(data => { staff.forEach(assign => { if(data.postcode == assign.postcode{ cuba3.push({ fsm:data.FSM, postcode: data.POSCODE, staff:assign.name }); } }); }); console.log(cuba3);No está perfectamente claro a partir de su código si realmente quería que la matriz de resultados fuera la combinación perfecta de las dos matrices de entrada usando el código postal clave para la coincidencia.
Por cierto, eso es lo que esta demostración intenta lograr:
recorre las dos matrices staff y cuba2 , produciendo una tercera matriz cuba3 que tiene elementos que tienen el mismo postcode y que contiene la propiedad fsm del elemento cuba y la propiedad staff del elemento staff :
let staff = [ {name:"tim", postcode:"68100",counter:0}, {name:"sam", postcode:"43500",counter:0}, {name:"apu", postcode:"55100",counter:0} ]; let cuba2 = [ {fsm:"111", postcode:"68100"}, {fsm:"222", postcode:"55555"}, {fsm:"333", postcode:"66666"} ]; let cuba3 = []; //for each staffItem in staff for(let staffItem of staff){ //for each cubaItem in cuba2 for(let cubaItem of cuba2){ //if an item in cuba2 was found matching staffItem.postCode if(cubaItem.postcode == staffItem.postcode) { //push a new item in cuba3 with a mix of properties coming both from cubaItem and staffItem cuba3.push({ fsm: cubaItem.fsm, postcode: cubaItem.postcode, staff: staffItem.name }); //since the corresponding cubaItem was found, skip to the next iteration of staffItem continue; } } } console.log(cuba3); /* The result will be an array with lenght == 1 because the two sets will interesect only for postcode == '68100' [ { fsm: "111" postcode: "68100" staff: "tim" } ] */Aquí puedes hacerlo de dos maneras diferentes.
let cuba3 = []; let staff = [ {name:"tim", postcode:"68100",counter:0}, {name:"sam", postcode:"43500",counter:0}, {name:"apu", postcode:"55100",counter:0} ]; let cuba2 = [ {fsm:"111", postcode:"68100"}, {fsm:"222", postcode:"55555"}, {fsm:"333", postcode:"66666"} ]; cuba2.forEach(cuba => { staff.forEach(assign => { if (cuba.postcode == assign.postcode) { cuba3.push({ fsm: cuba.fsm, postcode: cuba.postcode, staff: assign.name }); } }) }); console.log(cuba3);Sin embargo, el primero no es muy eficiente. Tiene bucles anidados. Podemos usar hashmaps (u objetos) en JavaScript como los siguientes:
const cuba3 = []; let staff = [ {name:"tim", postcode:"68100",counter:0}, {name:"sam", postcode:"43500",counter:0}, {name:"apu", postcode:"55100",counter:0} ]; let cuba2 = [ {fsm:"111", postcode:"68100"}, {fsm:"222", postcode:"55555"}, {fsm:"333", postcode:"66666"} ]; const staffPostcodes = {}; for (let i=0; i < staff.length; i++) { staffPostcodes[staff[i].postcode] = staff[i].name; } for (let i=0; i < cuba2.length; i++) { if (!staffPostcodes[cuba2[i].postcode]) { continue; } cuba3.push({ fsm: cuba2[i].fsm, postcode: cuba2[i].postcode, staff: staffPostcodes[cuba2[i].postcode] }); } console.log(cuba3);Este generará el mismo resultado pero mucho más rápido cuando la matriz se vuelva muy grande.