2 回答
TA贡献1790条经验 获得超9个赞
您可以使用reduce函数根据name属性对数据进行分组,然后取Object.values.
var a = [
{name: 'Foo', place: 'US', age: 15},
{name: 'Foo', place: 'UK', age: 21},
{name: 'Bar', place: 'Canada', age: 20},
{name: 'Bar', place: 'China', age: 22}
];
var result = Object.values(a.reduce((acc, {name, ...rest})=>{
acc[name] = acc[name] || {name, data:[]};
acc[name].data = [...acc[name].data, rest];
return acc;
},{}));
console.log(result);
TA贡献1846条经验 获得超7个赞
一种方法是使用 ES6 Map。您可以使用.reduce()
将对象累积到a
地图中。每个都name
可以是映射中的键,映射中的每个值都是一个对象数组,该对象的键为name
. 一旦构建了Map
,就可以使用Array.from()
将 Map 转换为数组,同时还提供映射函数,[name, data[]]
在 Map 到数组转换发生时将条目转换为对象。
请参见下面的示例:
const a = [
{name: 'Foo', place: 'US', age: 15},
{name: 'Foo', place: 'UK', age: 21},
{name: 'Bar', place: 'Canada', age: 20},
{name: 'Bar', place: 'China', age: 22}
];
const res = Array.from(a.reduce((m, {name, ...r}) => {
return m.set(name, (m.get(name) || []).concat(r));
}, new Map), ([name, data]) => ({name, data}));
console.log(res);
添加回答
举报