将JavaScript数组转换为URL编码-obj中的wthis数组

时间:2018-08-01 07:29:29

标签: javascript jquery arrays urlencode urldecode

我有这样的数组

{
search: "job", 
keywords: "", 
cat: [12,28,38]
}

我需要这样的url字符串

?search=job&keywords=&cat%5B%5D=12&cat%5B%5D=28&cat%5B%5D=38

我在worpdress中的查询

请帮助

此代码

var serialize = function(obj, prefix) {
    var str = [],
        p;
    for (p in obj) {
        if (obj.hasOwnProperty(p)) {
            var k = prefix ? prefix + "[" + p + "]" : p,
                v = obj[p];
            str.push((v !== null && typeof v === "object") ?
                serialize(v, k) :
                encodeURIComponent(k) + "=" + encodeURIComponent(v));
        }
    }
    return str.join("&");
};

我有这个

search=job&keywords=&cat%5B0%5D=12&cat%5B1%5D=28&cat%5B2%5D=38 

但是我不需要索引“ cat”

2 个答案:

答案 0 :(得分:1)

由于它被标记为[jquery],因此您可以使用jquery为您完成此操作,而无需重新发明轮子:

var x = {
  search: "job",
  keywords: "",
  cat: [12, 28, 38]
};
$("#result").text($.param(x));
div {
  border: 1px solid pink;
  padding: 4px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='result'></div>

答案 1 :(得分:0)

您可以映射所有键值对,并检查值是否为数组,然后添加方括号和数组的值。

var data = { search: "job", keywords: "", cat: ["12", "28", "38"] },
    string = '?' + encodeURI(Object
        .entries(data)
        .map(([k, v]) => Array.isArray(v)
            ? v.map(a => `${k}[]=${a}`).join('&')
            : `${k}=${v}`
        ).join('&'));

console.log(string); // ?search=job&keywords=&cat%5B%5D=12&cat%5B%5D=28&cat%5B%5D=38