鍍金池/ 問(wèn)答/HTML/ JSON數(shù)據(jù)合并

JSON數(shù)據(jù)合并

這是在做表格時(shí)遇到的問(wèn)題。

通常表格渲染方式,就是根據(jù)json數(shù)組中的數(shù)據(jù)一條條遍歷就好了,但需求是同一path下的數(shù)據(jù)要放在一行Table Row上渲染,也就是我需要把同一path的JSON數(shù)據(jù)合并,path數(shù)據(jù)合并覆蓋前者,但其他數(shù)據(jù)(即使key值相同)合并但不覆蓋前者,怎么才能有效的完成這種數(shù)據(jù)的合并呢?或是有更好的解決方法嗎?

    "export_dir_list": [
        {
            "path": "client_01",
            "client_list": [
                {
                    "client": "test_01",
                }
            ],
            "share_type": 1,   
            },
        {
            "path": "client_01",
            "group_list": [
                {
                    "group": "groupData",
                }
            ],
            "user_list": [
                {
                    "user": "userData",
                }
            ],
            "share_type": 2,
        },{
            "path": "client_02",
            "client_list": [
                {
                    "client": "test_02",
                }
            ],
            "share_type": 1,
        },
        {
            "path": "client_02",
            "group_list": [
                {
                    "group": "groupData_02",
                }
            ],
            "user_list": [
                {
                    "user": "userData_02",
                }
            ],
            "share_type": 2,
        }

    ]

對(duì)于原生JS實(shí)現(xiàn)JSON數(shù)據(jù)合并我是明白的,但當(dāng)前的數(shù)據(jù)格式有些想不明白該怎么合,希望不吝賜教!

回答
編輯回答
扯不斷
function parse(data) {
    const hash = {};
    data.slice().forEach(item => {
        const path = item.path;
        if (!hash[path]) {
            hash[path] = item;
        } else {
            Object.keys(item).forEach(key => {
                const hashPath = hash[path];
                if (key !== "path") {
                    const val = item[key];
                    if (!hashPath[key]) {
                        hashPath[key] = val;
                    }
                    else {
                        if (!Array.isArray(hashPath[key])) {
                            hashPath[key] = [hashPath[key]];
                        }
                        hashPath[key] = hashPath[key].concat(val);
                    }
                }

            })
        }

    });
    return Object.keys(hash).map(key => hash[key]);
}
var test = [
    {
        "path": "client_01",
        "client_list": [
            {
                "client": "test_01",
            }
        ],
        "share_type": 1,
    },
    {
        "path": "client_01",
        "group_list": [
            {
                "group": "groupData",
            }
        ],
        "user_list": [
            {
                "user": "userData",
            }
        ],
        "share_type": 2,
    }, {
        "path": "client_02",
        "client_list": [
            {
                "client": "test_02",
            }
        ],
        "share_type": 1,
    },
    {
        "path": "client_02",
        "group_list": [
            {
                "group": "groupData_02",
            }
        ],
        "user_list": [
            {
                "user": "userData_02",
            }
        ],
        "share_type": 2,
    }

];

console.log(parse(test));
2018年7月24日 08:13