Tengo una variedad de objetos como este:
[{ grade: 1, title: 'TitleA', code_no: 1, code_name: 'A', business_number: '', total_sales_count: 213, general_number: 0, resident_number: 20, address: '', }, { grade: 2, title: 'TitleB', code_no: 1, code_name: 'A', business_number: '', total_sales_count: 300, general_number: 0, resident_number: 12, address: '', }, { grade: 3, title: 'TitleC', code_no: 1, code_name: 'A', business_number: '', total_sales_count: 221, general_number: 0, resident_number: 9, address: '', }, ... ]y yo estaba tratando de refactorizar los objetos de esta manera:
[{ grade: 1, title: 'TitleA', type : {code_no: 1, code_name: 'A'}, business_number: '', counts: { total_sales_count: 213, general_number: 0, resident_number: 20 }, address: '', }, { grade: 2, title: 'TitleB', type: {code_no: 1, code_name: 'A'}, business_number: '', counts: { total_sales_count: 300, general_number: 0, resident_number: 12 }, address: '', }, { grade: 3, title: 'TitleC', type: {code_no: 1, code_name: 'A'}, business_number: '', counts: { total_sales_count: 221, general_number: 0, resident_number: 9 }, address: '', }, ... ] Entonces, la primera vez, solo usé un método de map como este
const test: any = data.map((i: any) => { const obj: any = { ...i, type: { code_no: i.code_no, code_name: i.code_name, }, counts: { total_sales_count: i.total_sales_count, general_number: i.general_number, resident_number: i.resident_number }, }; return obj; });e intenté eliminar los datos duplicados de la matriz, pero creo que no es el enfoque correcto para cambiar la estructura de la matriz... (porque tengo que cambiar los datos varias veces, no a la vez).
Soy muy nuevo en javascript, así que creo que hay una forma más eficiente de reestructurar el formato, pero no pude captar una pista. ¿Hay alguna forma de cambiar la estructura de una matriz de objetos?
Puede desestructurar solo las propiedades que necesita modificar y para el resto de las propiedades predeterminadas puede usar el operador de extensión
también type: { code_no,code_name} es la abreviatura de type: { code_no: code_no,code_name: code_name}
let data = [{ grade: 1, title: 'TitleA', code_no: 1, code_name: 'A', business_number: '', total_sales_count: 213, general_number: 0, resident_number: 20, address: '', }, { grade: 2, title: 'TitleB', code_no: 1, code_name: 'A', business_number: '', total_sales_count: 300, general_number: 0, resident_number: 12, address: '', }, { grade: 3, title: 'TitleC', code_no: 1, code_name: 'A', business_number: '', total_sales_count: 221, general_number: 0, resident_number: 9, address: '', },] const test = data.map(({code_no,code_name,total_sales_count,general_number,resident_number, ...defaultProps}) => { const obj = { ...defaultProps, type: { code_no,code_name}, counts: {total_sales_count,general_number,resident_number}, }; return obj; }); console.log(test)Desestructura los accesorios que se supone que se agregarán a los objetos nuevos y captura las otras propiedades con la sintaxis de descanso . Luego crea y devuelve un nuevo objeto.
const data=[{grade:1,title:"TitleA",code_no:1,code_name:"A",business_number:"",total_sales_count:213,general_number:0,resident_number:20,address:""},{grade:2,title:"TitleB",code_no:1,code_name:"A",business_number:"",total_sales_count:300,general_number:0,resident_number:12,address:""},{grade:3,title:"TitleC",code_no:1,code_name:"A",business_number:"",total_sales_count:221,general_number:0,resident_number:9,address:""}]; const out = data.map(obj => { const { code_no, code_name, total_sales_count, general_number, resident_number, ...rest } = obj; return { ...rest, type: { code_no, code_name }, counts: { total_sales_count, general_number, resident_number } }; }); console.log(out);No creo que puedas evitar usar un mapa o un bucle para lograr lo que quieres hacer. Use el mapa, pero debe declarar cada propiedad del nuevo objeto. Usando ...mantendré todas las propiedades antiguas y agregaré las nuevas también.
yourObjects.map((obj) => { return { grade: obj.grade, title: obj.title, type: {code_no: obj.code_no, code_name: obj.code_name }, counts: { total_sales_count: obj.total_sales_count, general_number: obj.general_number, resident_number: obj. resident_number }, address: obj.address, } }