从URL获取变量并转换为数组

时间:2018-02-20 16:35:56

标签: javascript

我需要从URL中检索变量。

我使用这个找到的功能:

function getParams(str) {

    var match = str.replace(/%5B/g, '[').replace(/%5D/g, ']').match(/[^=&?]+\s*=\s*[^&#]*/g);
    var obj = {};

    for ( var i = match.length; i--; ) {
      var spl = match[i].split("=");
      var name = spl[0].replace("[]", "");
      var value = spl[1];

      obj[name] = obj[name] || [];
      obj[name].push(value);
    }

    return obj;
}

var urlexample = "http://www.test.it/payments/?idCliente=9&idPagamenti%5B%5D=27&idPagamenti%5B%5D=26"

var me = getParams(stringa);

输出结果为:

 {"idPagamenti":["26","27"],"idCliente":["9"]}

但是idCliente始终不是数组,所以我想要检索:

{"idPagamenti":["26","27"],"idCliente": 9 }

这是小提琴的例子



function getParams(str) {
	
    var match = str.replace(/%5B/g, '[').replace(/%5D/g, ']').match(/[^=&?]+\s*=\s*[^&#]*/g);
	var obj = {};

	for ( var i = match.length; i--; ) {
	  var spl = match[i].split("=");
	  var name = spl[0].replace("[]", "");
	  var value = spl[1];

	  obj[name] = obj[name] || [];
	  obj[name].push(value);
	}

    return obj;
}

var stringa = "http://www.test.it/payments/?idCliente=9&idPagamenti%5B%5D=27&idPagamenti%5B%5D=26"

var me = getParams(stringa);

$(document).ready(function(){
  alert("testing");
  console.log(me);
	$(".a").html(JSON.stringify(me));
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="a">

</div>
&#13;
&#13;
&#13;

有人可以帮我修改代码吗?

1 个答案:

答案 0 :(得分:0)

我认为你面临着一个真正的范式问题。为什么idCliente不是一个数组,但idPagamenti将是。您应该拥有所有数组或没有但不能同时拥有。 getParams()函数可以为你做出这个选择,你可能应该改变你使用它的方式。

无论如何,这是一个getParams()函数,它将任何单值数组替换为值。请注意,如果您的URI中只有一个idPagamenti,那么您还将拥有idPagamenti而不是数组的单个值。

function getParams(str) {

    var match = str.replace(/%5B/g, '[').replace(/%5D/g, ']').match(/[^=&?]+\s*=\s*[^&#]*/g);
    var obj = {};

    for ( var i = match.length; i--; ) {
      var spl = match[i].split("=");
      var name = spl[0].replace("[]", "");
      var value = spl[1];

      obj[name] = obj[name] || [];
      obj[name].push(value);
    }

    Object.keys(obj).forEach(key => {
        if (obj[key].length === 1) {
            obj[key] = obj[key][0];
        }
    })
    return obj;
}

var urlexample = "http://www.test.it/payments/?idCliente=9&idPagamenti%5B%5D=27&idPagamenti%5B%5D=26"

var me = getParams(stringa);

如果您知道始终将ID作为参数,则还可以通过将var value = spl[1];替换为var value = parseInt(spl[1], 10);来为每个参数添加parseInt()