gpt4 book ai didi

Javascript 使用 object.create() 从字符串构建一棵树

转载 作者:行者123 更新时间:2023-11-28 17:07:56 24 4
gpt4 key购买 nike

我想从作为人员属性的字符串创建服务树。我设法做到了,但是代码非常丑陋,这对我来说是一个练习之王,因为诀窍是我想使用“Object.create()”来创建对象的“类”,其中该类将看起来像这样:

let service = {
serviceFather: "",
serviceChildren: [],
people: [],
}
};

输入示例是:

[
{
"name": "John Doe",
"service": "EE",
},
{
"name": "Jane Doe",
"service": "EE.EA",
},
{
"name": "Jack Smith",
"service": "EE.EA.EB",
},
{
"name": "Jill Smith",
"service": "EE.EA.EC"
},
{
"name": "Jake Smith",
"serviceLevel": "EE.EA.EC"
}
]

预期输出为:

[
{
"name": "EE",
"serviceFather": "root",
"people": [
{
"name": "John Doe"
}],
"serviceChildren": [
{
"name": "EA",
"serviceFather": "EE",
"people": [
{
"name": "Jane Doe"
}],
"serviceChildren": [
{
"name": "EB",
"serviceFather": "EA",
"people": [
{
"name": "Jack Smith"
}],
"sousService": ""
},
{
"name": "EC",
"serviceFather": "EA",
"people": [
{
"name": "Jill Smith"
},
{
"name": "Jake Smith"
}],
"sousService": ""
}]
}]
}]

最佳答案

您可以在服务属性上使用 split,然后使用 forEach 循环和 reduce 来迭代嵌套树并添加到数组中。

const data = [{ "name": "John Doe", "service": "EE" }, { "name": "Jane Doe", "service": "EE.EA" }, { "name": "Jack Smith", "service": "EE.EA.EB" },
{ "name": "Jill Smith", "service": "EE.EA.EC" }, { "name": "Jake Smith", "service": "EE.EA.EC" }
]

let service = {
serviceFather: "",
serviceChildren: [],
people: [],
};

function create(data) {
const res = []
data.forEach(obj => {
obj.service.split('.').reduce((r, e, i, a) => {
const match = r.find(({ name }) => name == e);
if(!match) {
const o = Object.create(service);
o.name = e;
o.serviceFather = (i == 0 ? 'root' : a[i - 1])
o.people = [{ name: obj.name }]
o.serviceChildren = [];
r.push(o)
return r;
} else {
if(!a[i + 1]) match.people.push({ name: obj.name })
return match.serviceChildren
}
}, res)
})
return res;
}

const result = create(data)
console.log(result)

关于Javascript 使用 object.create() 从字符串构建一棵树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55278648/

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