Javascript 多级对象展开运算符



我有一个对象数组,我希望所有对象中的所有数据都进入多个数组

const obj = [
{
school: {
name: 'abc',
students: [
{
class: 'A',
name: 'jhon',
},
{
class: 'B',
name: 'Doe',
},
],
},
},
{
school: {
name: 'XYZ',
students: [
{
class: 'C',
name: 'Cena',
},
{
class: 'B',
name: 'Big show',
},
],
},
},
];

我想要这样的结果

[ ["abc", "xyz"], ["A", "B", "C", "B"], ["jhon", "Doe", "Cena", "Big show"]]

任何帮助将不胜感激

您可以使用reduceObject.values它。在遍历学生数组时,您可以获取对象Object.entries。这是一个工作示例:

var obj = [ { school: { name: 'abc', students: [ { class: 'A', name: 'jhon', }, { class: 'B', name: 'Doe', }, ], }, }, { school: { name: 'XYZ', students: [ { class: 'C', name: 'Cena', }, { class: 'B', name: 'Big show', }, ], }, }];
var result = Object.values(obj.reduce((acc, {school})=>{
acc['schoolname'] = [...(acc['schoolname'] || []), school.name];
school.students.forEach(s=>{
Object.entries(s).forEach(([k,v])=>{
acc[k] = [...(acc[k] || []), v];
});
});
return acc;
},{}));
console.log(result);

尽管这已经得到了回答,但我想分享我的方法。

如果你能够添加一个依赖项,JSONata 是非常值得的,它不仅可以用于查询,还可以用于使用相当简单的查询来转换对象,大多数时候比常规的化简器或映射更容易阅读和理解。

使用 JSONata 您的代码将如下所示:

jsonata('[ [ $.school.name], [ $.school.students.class ], [ $.school.students.name ] ]').evaluate(obj);

https://try.jsonata.org/zqqQNjYmx

使用内置的数组方法。

schoolNames =obj.map(function(school){return school.school.name})
students = obj.map(function(school){return school.school.students}).flat()
studentNames = students.map(function(student){return student.name})
studentClass = students.map(function(student){return student.class})

最新更新