有没有更好的方法来重构javascript中的对象数组?



我有一个像这样的对象数组:

[{
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,
}
}

最新更新