recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Recherche d'une méthode de traitement de données js

var data={
            "soft":"1111",
            "soft.type":"1111",
            "soft.condition":"1111",
            "wonder":"1111",
            "wonder.WONDER":"1111",
            "wonder.WONDER.BS_TEST":"1111",
            "wonder.WONDER.DB2数据类型":"1111",
            "wonder.WONDER.DEP_TABLE":"1111",
            "wonder.WONDER.DIC_TABLE":"1111",
            "wonder.WONDER.TABLE8_NF":"1111",
            "wonder.WONDER.基本信息":"1111",
            "wonder.WONDER.姓名":"1111",
            "wonder.WONDER.数据类型":"1111"
}
var result=[{
            "name":"soft",
            "val":"1111",
            "children":[{
                "name":"type",
                "val":"1111",
            },{
                "name":"condition",
                "val":"1111",
            }]
        },{
            "name":"wonder",
            "val":"1111",
            "children":[{
                "name":"WONDER",
                "val":"1111",
                "children":[{
                    "name":"BS_TEST",
                    "val":"1111"
                },{
                    "name":"DB2数据类型",
                    "val":"1111"
                },{
                    "name":"DEP_TABLE",
                    "val":"1111"
                },{
                    "name":"姓名",
                    "val":"1111"
                },{
                    "name":"数据类型",
                    "val":"1111"
                }]
            }]
        }]

Je cherche un moyen de convertir des données en résultat. J'ai passé un après-midi entier et je n'ai pas pu l'écrire. Merci ! !

怪我咯怪我咯2779 Il y a quelques jours629

répondre à tous(2)je répondrai

  • 習慣沉默

    習慣沉默2017-05-19 10:46:02

    Je suis pressé et je n'ai pas encore écrit de commentaires. Veuillez l'exécuter et voir ~
    Par souci de commodité, je n'ai pas utilisé ES6 pour l'écrire, donc je vais me débrouiller. avec ça~

    <script>
    var data = {
        "soft":"1111",
        "soft.type":"1111",
        "soft.condition":"1111",
        "wonder":"1111",
        "wonder.WONDER":"1111",
        "wonder.WONDER.BS_TEST":"1111",
        "wonder.WONDER.DB2数据类型":"1111",
        "wonder.WONDER.DEP_TABLE":"1111",
        "wonder.WONDER.DIC_TABLE":"1111",
        "wonder.WONDER.TABLE8_NF":"1111",
        "wonder.WONDER.基本信息":"1111",
        "wonder.WONDER.姓名":"1111",
        "wonder.WONDER.数据类型":"1111"
    };
    function rebuild(data) {
        var result = [];
        Object.keys(data).map(function(key) {
            var val = data[key];
            var nameArr = key.split(".");
            var obj = result;
            nameArr.map(function(name, index) {
                var existResult = exist(obj, name);
                if (existResult) {
                    obj = existResult.children;
                } else {
                    var item = {name: name, children: []};
                    if (index === nameArr.length - 1) item.val = val;
                    obj.push(item);
                }
            });
        });
        return result;
    }
    function exist(arr, name) {
        var result = arr.filter(function(item) {
            return item.name === name;
        });
        return result.length > 0 ? result[0] : false;
    }
    console.log(rebuild(data));
    </script>
    

    répondre
    0
  • 天蓬老师

    天蓬老师2017-05-19 10:46:02

    var data = {
        "soft":"1111",
        "soft.type":"1111",
        "soft.condition":"1111",
        "wonder.WONDER":"1111",
        "wonder.WONDER.BS_TEST":"1111",
        "wonder.WONDER.DB2数据类型":"1111",
        "wonder.WONDER.DEP_TABLE":"1111",
        "wonder.WONDER.DIC_TABLE":"1111",
        "wonder.WONDER.TABLE8_NF":"1111",
        "wonder.WONDER.基本信息":"1111",
        "wonder.WONDER.姓名":"1111",
        "wonder.WONDER.数据类型":"1111",
        "wonder":"1111",
    }
    
    var toResult = function(data){
        var result = [];
        var tree = {}; //缓存结构
        var route; //路径
        var parent; //父节点
        var val; //值
        for( var item in data ){
            route = item.split('.');
            val = {
                "name" : route[route.length - 1],
                "val" : data[item]
            };
            
            parent = route.filter((v,index,arr)=>index < arr.length-1).join('.');
            if( parent != '' ){
                //考虑了子项(wonder.WONDER)可能写在项(wonder)前面,如果还没初始化,则设置为{}
                tree[parent] = tree[parent] || result[result.push({}) - 1];
                //如果父节点不存在 children 数组,则创建
                tree[parent].children = tree[parent].children || [];
            }
            if( item in tree ){
                //考虑了子项(wonder.WONDER)可能写在项(wonder)前面,已经初始化为{}
                tree[item].name = val.name;
                tree[item].val = val.val;
            } else {
                if( parent != '' ){
                    //如果有根节点,添加到根节点
                    tree[item] = tree[parent].children[tree[parent].children.push(val) - 1];
                } else {
                    //根节点,添加到result
                    tree[item] = result[result.push(val) - 1];
                }
            }
        };
        delete tree;
        return result;
    };
    
    console.log( JSON.stringify(toResult(data)) );

    Si vous pouvez vous assurer que l'ordre des données est a, a.b, a.b.c, vous pouvez également réduire plus d'une douzaine de lignes de code :

    var data = {
        "soft":"1111",
        "soft.type":"1111",
        "soft.condition":"1111",
        "wonder":"1111",
        "wonder.WONDER":"1111",
        "wonder.WONDER.BS_TEST":"1111",
        "wonder.WONDER.DB2数据类型":"1111",
        "wonder.WONDER.DEP_TABLE":"1111",
        "wonder.WONDER.DIC_TABLE":"1111",
        "wonder.WONDER.TABLE8_NF":"1111",
        "wonder.WONDER.基本信息":"1111",
        "wonder.WONDER.姓名":"1111",
        "wonder.WONDER.数据类型":"1111",
    }
    
    var toResult = function(data){
        var result = [];
        var tree = {}; //缓存结构
        var route; //路径
        var parent; //父节点
        var val; //值
        for( var item in data ){
            route = item.split('.');
            val = {
                "name" : route[route.length - 1],
                "val" : data[item]
            };
            parent = route.filter((v,index,arr)=>index < arr.length-1).join('.');
            if( parent != '' ){
                tree[parent].children = tree[parent].children || [];
                tree[item] = tree[parent].children[tree[parent].children.push(val) - 1];
            } else {
                tree[item] = result[result.push(val) - 1];
            }
        };
        delete tree;
        return result;
    };
    
    console.log( JSON.stringify(toResult(data)) );

    répondre
    0
  • Annulerrépondre