Как сделать строку запроса queryString с подстрокой в ​​цикле - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь создать QueryString с =, разделяющим каждый ключ и значение (например, ключ = значение), и & разделяющим каждую пару ключ-значение. Проблема, с которой я сталкиваюсь, состоит в том, когда значение является массивом, и мне нужно напечатать пару ключ-значение с тем же ключом с каждым значением. Образцы внизу с тем, каким должен быть ответ после //.


function toQueryString(obj) {
    var outer = Object.keys(obj).length;
    var printout = ""
    entries = [...Object.entries(obj)];
//    console.log(outer)
//    console.log(entries)
    for (var i=0; i<outer; i++) {
      let items = entries[i].length;
//      console.log(i, items);
      for (var n=0; n<items; n++) {
        const long = entries[i][n].length;
        if (Array.isArray(entries[i][n])) {
          for(var q=0; q<long; q++) {
//            console.log(entries[i][n][q]);
            printout = printout + entries[i][n][q] + "&";
          }
        }
        else if(i != entries[i][n].length) {
            printout = printout + entries[i][n] + "=";
      }
      }
    }
    console.log(printout.substring(0, printout.length - 1))
}





//toQueryString({}) // ""
//toQueryString({"bar": [ 2, 3], "foo": 1 }) // "bar=2&bar=3&foo=1"
toQueryString({name: "Elie", "nums": [1,2,3,4]}) // "name=Elie&nums=1&nums=2&nums=3&nums=4"

1 Ответ

0 голосов
/ 19 апреля 2020
const toQueryString = (obj) => Object.keys(obj)
  .reduce((arr, key) => {
    let val = obj[key]

    if ( ! Array.isArray(val)) val = [ val ]

    return arr.concat(val.map(v => `${key}=${v}`))
  }, [])
  .join('&')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...