gpt4 book ai didi

javascript优化多个reduce和map从嵌套对象中提取数据

转载 作者:行者123 更新时间:2023-12-01 02:18:42 24 4
gpt4 key购买 nike

我正在使用两个reducees和map从嵌套对象数组中提取一些数据,目前正在工作,但它有点丑陋的。如何优化?

function extractSchools(schools) {
let schoolData = [];

if (schools) {
schoolData = schools.reduce(function(parentdata, chlrn) {
let childrenlist = chlrn.children;
let childrendata = [];

if (childrenlist) {
childrendata = childrenlist.reduce(function(addrsslist, school) {
return addrsslist.concat(school.address.map(i => i.school));
}, []);
}

return parentdata.concat(chlrn.parent, childrendata);
}, []);
}

return {
schoolData
};
}

const schools = [{
"parent": "Thomas Jefferson",
"children": [{
"address": [{
"school": "School A"
}]
},
{
"address": [{
"school": "School B"
}]
}
]
},
{
"parent": "Jack Chan",
"children": [{
"address": [{
"school": "School C"
}]
}]
}
];


console.log(extractSchools(schools));

如何优化此函数以获得相同的结果?使用一个reduce而不是两个...或者其他一些最佳的方法来做到这一点。

最佳答案

您可以删除 if (childrenlist) { 并使用预过滤器。

function extractSchools(schools) {
let schoolData = [];

if (schools) {
schoolData = schools
.filter(data => data.children)
.reduce((parentdata, chlrn) => {
const childrendata = chlrn.children.reduce(
(addrsslist, school) =>
addrsslist.concat(school.address.map(i => i.school)),
[]
);
return parentdata.concat(chlrn.parent, childrendata);
}, []);
}

return { schoolData };
}

const schools = [
{
parent: "Thomas Jefferson",
children: [
{
address: [
{
school: "School A"
}
]
},
{
address: [
{
school: "School B"
}
]
}
]
},
{
parent: "Jack Chan",
children: [
{
address: [
{
school: "School C"
}
]
}
]
}
];

console.log(extractSchools(schools));

关于javascript优化多个reduce和map从嵌套对象中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49361102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com