我有一个像这样的对象数组:
[{
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: '',
},
...
]
,我试着像这样重构对象:
[{
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: '',
},
...
]
第一次,我使用了这样的map
方法
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;
});
并试图从数组中删除重复的数据,但我认为改变数组的结构不是很正确的方法…(因为我必须多次更改数据,而不是一次)
我是非常新的javascript,所以我认为有更有效的方式来重组格式,但不能抓住一个线索。有没有办法改变对象数组的结构?
解构要添加到新对象中的道具,并使用rest语法捕获其他属性。然后创建并返回一个新对象。
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);
只能解构需要修改的属性,其余的默认属性可以使用展开运算符
type: { code_no,code_name}
也是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)
我不认为你可以避免使用map或循环来实现你想要做的事情。使用map,但是您应该声明新对象的每个属性。使用……我将保留所有旧的属性,并添加新的。
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,
}
}