const states = ["BR", "UP"]; const template = [ { "State": "", "allotment": 25622 }, { "State": "", "expenditure": 1254 } ]; let totalRecords: any[] = []; states.forEach(state=>{ const cc = template.map(record=> {record.State = state; return record}) console.log(state, cc);// here i get the indiviual record set. totalRecords = totalRecords.concat(cc); }) console.log(totalRecords);aquí estoy tratando de obtener una lista concatenada de plantillas con diferentes estados, pero de alguna manera está sobrescribiendo los registros anteriores. aunque como se ve en la consola después de agregar el mapa a la plantilla, se ve un conjunto de registros adecuado. todavía no se está concatenando correctamente.
cómo hacerlo correctamente como resultado requerido es
[{ "State": "BR", "allotment": 25622 }, { "State": "BR", "expenditure": 1254 }, { "State": "UP", "allotment": 25622 }, { "State": "UP", "expenditure": 1254 }]El problema es que está reutilizando los objetos de la template , simplemente sobrescribiendo las propiedades de esos objetos. Si desea tener varios objetos para cada estado, deberá crear nuevos objetos en su lugar:
const cc = template.map((record) => { record = { ...record, State: state }; // *** return record; });Ejemplo en vivo:
const states = ["BR", "UP"]; const template = [ { State: "", allotment: 25622, }, { State: "", expenditure: 1254, }, ]; let totalRecords /*: any[]*/ = []; states.forEach((state) => { const cc = template.map((record) => { record = { ...record, State: state }; return record; }); console.log(state, cc); totalRecords = totalRecords.concat(cc); }); console.log(totalRecords); .as-console-wrapper { max-height: 100% !important; }puedes usar flatMap y map para eso como este
const states = ["BR", "UP"]; const template = [ { "State": "", "allotment": 25622 }, { "State": "", "expenditure": 1254 } ]; const totalRecords = states.flatMap(State=> template.map(record=> ({...record, State}))) console.log(totalRecords)El problema en su programa radica aquí: template.map(record=> {record.State = state; return record})
No está devolviendo un objeto nuevo, está sobrescribiendo uno anterior.
Prueba esto:
const states = ["BR", "UP"]; const template = [ { "State": "", "allotment": 25622 }, { "State": "", "expenditure": 1254 } ]; let totalRecords: any[] = []; states.forEach(state=>{ const cc = template.map(record=> ({...record, 'State': state})) totalRecords = totalRecords.concat(cc); }) console.log(totalRecords);