Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript {label}}}}); 控制台日志(输出)_Javascript_Arrays_Json_Angular - Fatal编程技术网

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
和multiple
array#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'
                    }
                ]
            }
        ]
    }
]