javascript - 数据转化的问题
本文介绍了javascript - 数据转化的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
假如说我现在有一段这样的数据
type=line&areaStyle.show=true&lineStyle.normal.color=#000
&lineStyle.normal.width=2
type=bar&areaStyle.show=false&lineStyle.normal.color=#fff
&lineStyle.normal.width=
从数据中我们可以看出从type开始到lineStyle.normal.width结束重复了,我需要的是重复了几次就往数组里塞几个对象,以上重复了两段那么最终的格式如下,我是一点都摸不着头绪,js这方面比较弱,望大神指点,最好能简单阐述下思路我可以慢慢研究
[
{
type:'line',
areaStyle:{
show:true
},
lineStyle:{
normal:{
color:'#000',
width:2
}
}
},
{
type:'bar',
areaStyle:{
show:true
},
lineStyle:{
normal:{
color:'#fff'
width:
}
}
},
]
解决方案
function formatter(str) {
var result = [];
var array = str.split("&");
var obj = {};
if (str == "") return result;
array.forEach(function(item, index) {
var current = item.split("=");
var key = current[0];
if (key === "type" && index) {
result.push(obj);
obj = {}
}
var value = current[1];
var keyArray = key.split(".");
var keyArrayLen = keyArray.length - 1;
var i = 0;
var tmp = obj;
while(i < keyArrayLen) {
var j = tmp[keyArray[i]];
if (!j) tmp[keyArray[i]] = {};
tmp = tmp[keyArray[i]];
i++;
}
tmp[keyArray[i]] = value;
});
array.length && result.push(obj);
return result;
}
var str = "type=line&areaStyle.show=true&lineStyle.normal.color=#000&lineStyle.normal.width=2&type=bar&areaStyle.show=false&lineStyle.normal.color=#fff&lineStyle.normal.width=3";
formatter(str);
这篇关于javascript - 数据转化的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文