数组套对象数据格式转化为el-tree适用的数据格式

101 阅读1分钟

数组套对象数据格式转化为el-tree适用的数据格式

 jsonToTree(objects, keyName, parentKeyName) {
    if (!keyName) {
        throw "keyName argument is required";
    }
    if (!parentKeyName) {
        throw "parentKeyName argument is required";
    }

    // 列表项字典 将数组变成以objectId分组的对象,类似于{Vvwkeujpo:{},Rohdsfdofj:{}}
    var map = {};
    objects.forEach(x => (map[x[keyName]] = Object.assign({}, x)));

    // 已添加到父项的键
    var pushed = {};

    // 遍历列表项,将子项添加到父项的 children 数组
    for (const key in map) {
        if (map.hasOwnProperty(key)) { // 这样就可以过滤掉原型链上的可枚举属性了
            const x = map[key];
            if (x && x[keyName] && x[parentKeyName]) {
                var parent = map[x[parentKeyName]];
                if (parent) {
                    if (!parent.children) {
                        parent.children = [];
                    }
                    parent.children.push(x);
                    pushed[x[keyName]] = true;
                }
            }
        }
    }

    // 排除已添加到父项的项得到树
    var tree = [];
    for (const key in map) {
        if (map.hasOwnProperty(key)) {
            const x = map[key];
            if (!pushed[x[keyName]]) {
                tree.push(x);
            }
        }
    }
    return tree;
},