Make a JavaScript array from URL

前端 未结 4 2055
甜味超标
甜味超标 2020-12-05 02:35

I need to make a Javascript array from URL, eg:

turn this:

http://maps.google.com/maps/api/staticmap?center=Baker Street 221b, London&size=450x45         


        
相关标签:
4条回答
  • 2020-12-05 03:20

    the above function URLToArray is not working when url string has elem[]=23&elem[]=56.. see below the adapted function... hope it is working - not 100% tested

    function URLToArray(url) {
            var request = {};
            var arr = [];
            var pairs = url.substring(url.indexOf('?') + 1).split('&');
            for (var i = 0; i < pairs.length; i++) {
              var pair = pairs[i].split('=');
    
              //check we have an array here - add array numeric indexes so the key elem[] is not identical.
              if(endsWith(decodeURIComponent(pair[0]), '[]') ) {
                  var arrName = decodeURIComponent(pair[0]).substring(0, decodeURIComponent(pair[0]).length - 2);
                  if(!(arrName in arr)) {
                      arr.push(arrName);
                      arr[arrName] = [];
                  }
    
                  arr[arrName].push(decodeURIComponent(pair[1]));
                  request[arrName] = arr[arrName];
              } else {
                request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
              }
            }
            return request;
        }
    

    where endWith is taken from here

    function endsWith(str, suffix) {
        return str.indexOf(suffix, str.length - suffix.length) !== -1;
    }
    
    0 讨论(0)
  • 2020-12-05 03:27

    URL to array: (adapted from my answer here)

    function URLToArray(url) {
        var request = {};
        var pairs = url.substring(url.indexOf('?') + 1).split('&');
        for (var i = 0; i < pairs.length; i++) {
            if(!pairs[i])
                continue;
            var pair = pairs[i].split('=');
            request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
         }
         return request;
    }
    

    Array to URL:

    function ArrayToURL(array) {
      var pairs = [];
      for (var key in array)
        if (array.hasOwnProperty(key))
    
          pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(array[key]));
      return pairs.join('&');
    }
    
    0 讨论(0)
  • 2020-12-05 03:31
     /**
     * (C)VIOLONIX inc.
     * Parser for make multidim array from
     * foo[]=any&foo[]=boy, or foo[0][kids]=any&foo[1][kids]=boy
     * result: foo=[[any],[boy]] or foo=[kids:[any],kids:[boy]]
     */    
    
     var URLToArray = function(url){
            function parse_mdim(name, val, data){
                let params = name.match(/(\[\])|(\[.+?\])/g);
                if(!params)params = new Array();
                let tg_id = name.split('[')[0];
    
    
                if(!(tg_id in data)) data[tg_id] = [];
                var prev_data = data[tg_id];
    
                for(var i=0;i<params.length;i++){
                    if(params[i]!='[]'){
                        let tparam = params[i].match(/\[(.+)\]/i)[1];
                        if(!(tparam in prev_data)) prev_data[tparam] = [];
                        prev_data = prev_data[tparam];
                    }else{
                        prev_data.push([]);
                        prev_data = prev_data[prev_data.length-1];
                    }
    
                }
                prev_data.push(val);
    
            }
    
    
            var request = {};
            var arr = [];
            var pairs = url.substring(url.indexOf('?') + 1).split('&');
    
            for (var i = 0; i < pairs.length; i++) {
               var pair = pairs[i].split('=');
               if(decodeURIComponent(pair[0]).indexOf('[')!=-1)
                   parse_mdim(decodeURIComponent(pair[0]), decodeURIComponent(pair[1]), request);
               else 
                   request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
             }
    
            //To-do here check array and simplifity it: if parameter end with one index in array replace it by value [0]    
    
             return request;
    
        }
    
    0 讨论(0)
  • 2020-12-05 03:42

    There's the query-object jQuery plugin for that

    0 讨论(0)
提交回复
热议问题