JSON :(基本上我有对象数组。应该将前3个对象设置为一个表单组,因此需要根据mat_name.id将前3个对象转换为1个对象。.编辑了我的问题..您能帮我做这个吗? ??)
const array1 = [{
mat_name:{
id:1,
title:"rose"
},
month:Mar,
year:2020,
price:20
},
{
mat_name:{
id:1,
title:"rose"
},
month:Apr,
year:2020,
price:30
},
{
mat_name:{
id:1,
title:"rose"
},
month:May,
year:2020,
price:40
},
{
mat_name:{
id:2,
title:"jasmine"
},
month:Mar,
year:2020,
price:50
},
{
mat_name:{
id:2,
title:"jasmine"
},
month:Apr,
year:2020,
price:60
},
{
mat_name:{
id:2,
title:"jasmine"
},
month:May,
year:2020,
price:80
}
];
转换Json :(上面的数组应根据月份,年份和mat_name进行此操作。)
const array1 = [
{
mat_name:'Rose',
mat_id:1,
price1:20,
price2:30,
price3:40
},
{
mat_name:'Jasmine',
mat_id: 2,
price1:50,
price2:60,
price3:80
},
]
答案 0 :(得分:0)
您可以将.reduce()
与ES6 Map结合使用,对所有价格进行分组。在此,地图使用mat_name
作为其键,并使用与该mat_name
相关的价格数组作为其值。通过将此映射作为第一个参数传递到Array.from()
中,并作为第二个参数提供映射功能,可以将数组中的每个键值对映射到对象。该对象可以包含mat_name
,以及数组中的价格(使用Object.assign()
合并):
const arr = [{ mat_name: 'Rose', month: 'Mar', year: 2020, price: 20 }, { mat_name: 'Rose', month: 'Apr', year: 2020, price: 30 }, { mat_name: 'Rose', month: 'May', year: 2020, price: 40 }, { mat_name: 'Jasmine', month: 'Mar', year: 2020, price: 50 }, { mat_name: 'Jasmine', month: 'Apr', year: 2020, price: 60 }, { mat_name: 'Jasmine', month: 'May', year: 2020, price: 80 } ];
const res = Array.from(
arr.reduce((m, {mat_name, price}) =>
m.set(mat_name, [...(m.get(mat_name) || []), price]), new Map),
([mat_name, prices]) =>
Object.assign({mat_name}, ...prices.map((p, i) => ({['price'+(i+1)]: p})))
);
console.log(res);