JavaScript,字符串/对象操作的例外

javascript, exception for string/object manipulation

本文关键字:操作 对象 字符串 JavaScript      更新时间:2023-09-26

所以,我必须函数将字符串转换为对象,将对象转换为字符串,但是我需要考虑一个例外,我不确定如何。让我告诉你我有什么

     parseObjectToUrl: function (obj){
            var myStr = "";
            var first_iteration = true;
            for (var p in obj) {
                if(first_iteration){
                    myStr += p + "=";
                   first_iteration = false; 
                }else{
                    myStr += "&" + p + "=";
                }
                tObj = obj[p];
                var first_inner = true;
                 for(t in tObj){
                    if(first_inner){
                        myStr +=  t;   
                        first_inner = false;
                      }else{
                        myStr += "," + t; 
                      }
                        yObj = tObj[t];
                       for( y in yObj){
                            myStr += "/" + yObj[y];
                       }
                 }
            }
           return myStr;
       },
       parseObjectFromUrl : function(url){
            var builtObj = {};
            //remove first slash
            url = url.slice(0, 0) + url.slice(1);
            var ch = url.split('&');
            var tempParent = {};
            for (var p in ch) {
                var tempSub = {};
                var arr = ch[p].split('=');
                var keyParent = arr[0];
                var splitInside = arr[1].split(",");
                for (var i in splitInside) {
                    var sub = splitInside[i].split('/');
                    var subKey = sub[0];
                    tempSub[subKey] = sub.slice(1);
                } 
                tempParent[keyParent] = tempSub;
            }
            return tempParent
        }

所以这些字符串看起来像

 /module1=mod1/2/3/4,mod2/2/3/4&module2=mod2/3/4/5

并且对象看起来像

myObj = 
{ 
 module1 : { mod1 : [2,3,4] , mod2 [2,3,4]} ,
module2 : { mod2 : [3,4,5]} 

}

所以这些功能对我来说工作正常,但是我(不幸的是)需要能够处理用户在选项中添加"/"的情况

,例如 -
 myObj = 
{ 
 module1 : { mod1 : [2/,3/,4/] , mod2 [2,3,4]} ,
module2 : { mod2 : [3,4,5]} 

}

我敢肯定它会在我的函数中抛出一个扳手,因为我被"/"分割,所以我不确定如何解决这个问题。我会逃脱斜杠吗?如果是这样,这将如何适应这些功能?寻找有关此问题的任何建议。谢谢!

编辑:

我能够对转义的网址进行编码,例如:

 obj.replace(/([/-])/g, "%2F");

到一个转义的 URL,呵呵,我无法反其道而行之。 这是我的尝试。

 obj.replace(/(%2F)/g, "/");
在我看来

,最好使用 url 数组,但请记住,URL 的字符可能会受到限制:

HTTP GET 请求的最大长度?

话虽如此,人们可以做这样的事情:

module1[]=1&module1[]=2&module2[]=4&module2[]=3

这等于以下伪代码:

$_GET["module1"] = array(1,2);
$_GET["module2"] = array(4,3);
并使用 encodeURIComponent

和 decodeURIComponent 作为您的值

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent