JavaScript 数组到 URLencoded - wthis array in obj

JavaScript Array to URLencoded - wthis array in obj

我有这样的数组

{
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"

的索引

由于这是标记 [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>

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

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