javascript - js数据封装问题
本文介绍了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屋!
查看全文