如何在es6中展开对象数组



我有一个类似的对象数组。我想提取嵌套对象,并将其作为预期输出返回。我的方法已经不起作用了,也不确定它对大数据集的迭代是否有效。

const data = [
{
name: 'Micheal',
desc: 'Micheal',
empObj: {
empId: 1,
empName: 'Micheal',
country: 'UK',
}
},
{
name: 'Allen',
desc: 'Allen',
empObj: {
empId: 2,
empName: 'Allen',
country: 'Germany',
}
},
{
name: 'Rose',
desc: 'Rose',
empObj: {
empId: 3,
empName: 'Rose',
country: 'USA',
}
}
];

我需要像一样平放/转换数据

[
{
name: 'Micheal',
desc: 'Micheal',
empId: 1,
empName: 'Micheal',
country: 'UK',
},
{
name: 'Allen',
desc: 'Allen',
empId: 2,
empName: 'Allen',
country: 'Germany',
},

{
name: 'Rose',
desc: 'Rose',    
empId: 3,
empName: 'Rose',
country: 'USA',


}
]

但我得到

未捕获类型错误:无法将未定义或null转换为对象

const expected = Object.keys(data.empObj).reduce(function(r, k) {
return r.concat(k, object.empObj[k]);
}, []);
console.log('expected', expected);

感谢

使用map()方法以及destructuring和spread and rest语法。

我们可以通过取消对empObj键的跟踪并使用rest语法收集数组中每个对象中的其余属性来实现所需的输出。

map()方法的回调函数中,返回一个新对象,使用排列语法在新创建的对象中排列empObj以及其他属性。

const data = [
{ name: 'Micheal', desc: 'Micheal', empObj: { empId: 1, empName: 'Micheal', country: 'UK' } },
{ name: 'Allen', desc: 'Allen', empObj: { empId: 2, empName: 'Allen', country: 'Germany' } }
];
const result = data.map(({ empObj, ...rest }) => {
return { ...rest, ...empObj };
});
console.log(result);


您的代码抛出错误的原因是因为data是一个数组,所以data.empObj是未定义的,并且您将这个未定义的值传递给Object.keys(...)方法。

使用地图可以轻松实现这一点

data.map(({ name, desc, empObj }) => ({ name, desc, ...empObj }))

const data = [
{
name: "Micheal",
desc: "Micheal",
empObj: {
empId: 1,
empName: "Micheal",
country: "UK",
},
},
{
name: "Allen",
desc: "Allen",
empObj: {
empId: 2,
empName: "Allen",
country: "Germany",
},
},
{
name: "Rose",
desc: "Rose",
empObj: {
empId: 3,
empName: "Rose",
country: "USA",
},
},
];
const result = data.map(({ name, desc, empObj }) => ({ name, desc, ...empObj, }));
console.log(result);

只需使用Spread语法(…)和.map()

const output = data.map(d => ({name: d.name, desc: d.desc, ...d.empObj}))

相关内容

  • 没有找到相关文章

最新更新