javascript - 数据转化的问题

查看:79
本文介绍了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屋!

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