0

I have array like this

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

and I need url string like this

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

for my query in worpdress

please, help

This code

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("&");
};

and I have this

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

but I do not need an index whith "cat"

2 Answers2

1

As this is tagged [jquery], you can use jquery to do this for you, no need to re-invent the wheel:

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>
freedomn-m
  • 27,664
  • 8
  • 35
  • 57
0

You could map all key value pairs and check if a value is an array, then add brackets and the values of the array.

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
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392