javascript - js数据封装问题

查看:88
本文介绍了javascript - js数据封装问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

{"config_name_0":"11","mountEnv_0_5723":{"lable":"22","val":"33","type":"1"},"mountEnv_1_5723":{"lable":"44","val":"55","type":"1"},"config_name_1":"66","mountEnv_0_4268":{"lable":"77","val":"88","type":"1"},"mountEnv_1_4268":{"lable":"99","val":"00","type":"1"}}

这段数据转换成

[{
config_name:'11',
mountEnv:[
    {"lable":"22","val":"33","type":"1"},
    {"lable":"44","val":"55","type":"1"}
        ]
},
config_name:'66',
mountEnv:[
    {"lable":"77","val":"88","type":"1"},
    {"lable":"99","val":"00","type":"1"}
        ]
    }
]

解决方案

var input = {"config_name_0":"11","mountEnv_0_5723":{"lable":"22","val":"33","type":"1"},"mountEnv_1_5723":{"lable":"44","val":"55","type":"1"},"config_name_1":"66","mountEnv_0_4268":{"lable":"77","val":"88","type":"1"},"mountEnv_1_4268":{"lable":"99","val":"00","type":"1"}};
var result = [];
var regName = /_(\d+)/;
var regMount = /_(\d+)_/;
for (var key in input) {
    if (typeof input[key] == 'string') {
        var index = key.match(regName)[1];
        if (!result[index]) result[index] = {config_name:'', mountEnv:[]};
        result[index]["config_name"] = input[key];
    } else {
        var index = key.match(regMount)[1];
        if (!result[index]) result[index] = {config_name:'', mountEnv:[]};
        result[index]["mountEnv"].push(input[key]);
    }
}

这个是根据config_name_x 和 mountEnv_x_ssss中的x来确定同一个对象的数据,但是按照lz的转化完数据来看,我没看出来确切的数据对应。。
我的转化结果

[{
config_name:'11',
mountEnv:[
    {"lable":"22","val":"33","type":"1"},
    {"lable":"77","val":"88","type":"1"}
        ]
},
config_name:'66',
mountEnv:[
    {"lable":"44","val":"55","type":"1"},
    {"lable":"99","val":"00","type":"1"}
        ]
    }
]

lz的是按照ssss的合并,但是前后顺序呢?
如果是可以保证前后顺序,那么可以这样

var input = {"config_name_0":"11","mountEnv_0_5723":{"lable":"22","val":"33","type":"1"},"mountEnv_1_5723":{"lable":"44","val":"55","type":"1"},"config_name_1":"66","mountEnv_0_4268":{"lable":"77","val":"88","type":"1"},"mountEnv_1_4268":{"lable":"99","val":"00","type":"1"}};
var result = [];
var regName = /_(\d+)/;
var index;
for (var key in input) {
    if (typeof input[key] == 'string') {
        index = key.match(regName)[1];
        if (!result[index]) result[index] = {config_name:'', mountEnv:[]};
        result[index]["config_name"] = input[key];
    } else {
        result[index]["mountEnv"].push(input[key]);
    }
}

20170817补充:

var input = {"config_name_0":"111","mountEnv_0_4035":{"lable":"222","val":"3333","type":"1"},"mountEnv_1_4035":{"lable":"","val":"4444","type":"2"},"config_name_1":"555","mountEnv_0_169":{"lable":"666","val":"777","type":"1"},"mountEnv_1_169":{"lable":"","val":"888","type":"2"},"mountEnv_2_4035":{"lable":"","val":"yyyyy","type":"2"}}
var result = [], index, tmp = {};
var regMount = /_(\d+)_/; // 匹配_x_
var regLast = /_(\d+)$/; // 匹配_x$
for (var i in input) {
    if (typeof input[i] == 'string') {
        // 处理config_name
        index = i.match(regLast)[1];
        if (!result[index]) result[index] = {config_name:'', mountEnv:[]};
        result[index]["config_name"] = input[i];
    } else {
        // 处理mountEnv
        if (!tmp[i.match(regLast)[1]]) tmp[i.match(regLast)[1]] = []
        tmp[i.match(regLast)[1]].push(input[i]); // 用tmp进行分组
        if (index == i.match(regMount)[1]) {
            result[index]["mountEnv"] = tmp[i.match(regLast)[1]]
        }
    }
}

这篇关于javascript - js数据封装问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆