Javascript {label}}}}); 控制台日志(输出)
您可以使用Javascript {label}}}}); 控制台日志(输出),javascript,arrays,json,angular,Javascript,Arrays,Json,Angular,您可以使用array#reduce和multiplearray#forEach对数据进行结构化,然后根据此结果,使用array#map和Object.keys()获得最终格式 const data={“car”:[{“name”:“benz”,“details”:[{“name”:“C1”,“year”:[{“name”:“1850”,“errs”:[{“user”:“model-A”,“text”:“model-H上的错误文本”},{“user”:“model-C”,“text”:“mode
array#reduce
和multiplearray#forEach
对数据进行结构化,然后根据此结果,使用array#map
和Object.keys()
获得最终格式
const data={“car”:[{“name”:“benz”,“details”:[{“name”:“C1”,“year”:[{“name”:“1850”,“errs”:[{“user”:“model-A”,“text”:“model-H上的错误文本”},{“user”:“model-C”,“text”:“model-C上的错误文本”},{“name”:“1820”,“errs”:[{“user”:“model-C”,“text”:“model-C上的错误文本”}]},{“name”:“vw”,“详情”:[{“名称”:“A1”,“年份”:[{“名称”:“1860”,“错误”:[]},{“名称”:“1870”,“错误”:[{“用户”:“模型-A”,“文本”:“模型-H上的错误文本”}]},{“名称”:“A2”,“年份”:[{“名称”:“1910”,“错误”:[]},{“名称”:“1950”,“错误”:[{“用户”:“模型-A”,“文本”:“模型-H上的错误文本”}]}]},
结果=data.car.reduce((r,{name,details})=>{
详细信息。forEach(o1=>{
o1.年份forEach(o2=>{
o2.errs.forEach(({user,text})=>{
r[user]=r[user]| |{};
r[用户][名称]=r[用户][名称]| |[];
如果(!r[user][name]。包括(o1.name))
r[user][name].push(o1.name);
});
});
});
返回r;
},{});
const output=Object.keys(result).map(k=>({label:k,children:Object.keys(result[k]).map(key=>({label:key,children:result[k][key].map([label])=>({label}));
console.log(output);
那是什么结构?数组还是映射?那是什么结构?数组还是映射?感谢您的解决方案,实际上我的树模型是一个基于标签和子对象的对象,例如:{label:'model-A',children:[{label:benz,children:[{label:C1}]}],你能帮助我如何从结果json创建这样的结构吗,我正在修改这个问题。谢谢你的解决方案,实际上我的树模型是一个基于标签和子对象的对象,例如:{label:'model-a',children:[{label:benz,children:[{label:C1}]}],你能帮助我如何从结果json创建这样的结构吗,我正在修改这个问题。
{
"car": [
{
"name": "benz",
"details": [
{
"name": "C1",
"year": [
{
"name": "1850",
"errs": [
{
"user": "model-A",
"text": "error text on model-H"
},
{
"user": "model-C",
"text": "error text on model-C"
}
]
},
{
"name": "1820",
"errs": [
{
"user": "model-C",
"text": "error text on model-C"
}
]
}
]
}
]
},
{
"name": "vw",
"details": [
{
"name": "A1",
"year": [
{
"name": "1860",
"errs": []
},
{
"name": "1870",
"errs": [
{
"user": "model-A",
"text": "error text on model-H"
}
]
}
]
},
{
"name": "A2",
"year": [
{
"name": "1910",
"errs": []
},
{
"name": "1950",
"errs": [
{
"user": "model-A",
"text": "error text on model-H"
}
]
}
]
}
]
}
]
}
ngOnInit():void {
this.http.get('.car.json').subscribe((data) => {
data.car.forEach((carItem) => {
carItem.details.forEach((detail) => {
const errorsTree = {};
detail.year.forEach((year) => {
year.errs.forEach((err) => {
let userNode;
let carNode;
let detailNode;
if (errorsTree[err.userAgent]) {
userNode = errorsTree[err.userAgent];
} else {
userNode = {name: err.userAgent, cars: {}};
errorsTree[err.userAgent] = userNode;
}
const components = userNode.cars;
if (components[carItem.name]) {
carNode = cars[carItem.name];
} else {
carNode = {name: carItem.name, details: {}};
components[carItem.name] = carNode;
}
const detailsItems = carNode.details;
if (detailsItems[detail.name]) {
detailNode = detailsItems[detail.name];
} else {
detailNode = {name: detail.name, tests: {}};
detailsItems[detail.name] = detailNode;
}
detailNode.tests[test.name] = test;
this.TreeModel.push({
label: userNode.name,
children: _.values(userNode.cars).map((car) => {
return {
label: car.name,
children: _.values(car.details).map((deta) => {
return {
label: deta.name,
children: _.values(deta.tests).map((testItem) => {
return {
label: testItem.name,
err: err.text
};
})
};
})
};
})
});
});
});
});
});
});
}
model-A
benz
C1
model-C
benz
C1
model-C
benz
C1
model-A
vw
A1
model-A
vw
A2
[
{
label: 'model-A',
children: [
{
label: 'benz',
children: [
{
label: 'C1'
}
]
},
{
label: 'vw',
children: [
{
label: 'A1'
},
{
label: 'A2'
}
]
}
]
},
{
label: 'model-C',
children: [
{
label: 'benz',
children: [
{
label: 'C1'
}
]
}
]
}
]