Преобразовать объект в строковый параметр URL с проверкой массива

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть объект с некоторыми значениями в виде массивов.

 let paramObj = {
    name: 'title',
    properties: [01, 02, 03],
    rooms: [01],
    city: 'cityname'
}
  

Я хочу преобразовать его в параметры URL следующим образом

 http://localhost:8080/endpoint?name=titleamp;properties=01amp;properties=02amp;properties=03amp;rooms=01amp;city=cityName
  

У меня есть кое-что, что отлично работает для обычных строк, но я хочу проверить, имеет ли ключ объекта массив, чем преобразовывать его в несколько параметров. вот мой код

  const qs = Object.keys(paramObj)
.map(key => `${key}=${paramObj[key]}`)
.join('amp;');
  

Комментарии:

1. Что мешает вам проверять наличие массива?

2. Привет, я новичок, я не знаю, как это сделать в приведенном выше коде. если вы можете поделиться любыми соответствующими ссылками, которые будут полезны. Спасибо

Ответ №1:

Вы можете использовать Array.isArray() метод, как в демонстрации ниже. Если начальные нули важны, то элементы массива должны быть записаны в строковом формате, например, «01» вместо 01.

 let paramObj = {
    name: 'title',
    properties: [01, 02, 03],
    rooms: ["01"],
    city: 'cityname'
}


const qs = Object.keys(paramObj)
.map(
    key => Array.isArray(paramObj[key]) ? 
        paramObj[key].map(v => `${key}=${v}`).join('amp;') : 
            `${key}=${paramObj[key]}`
)
.join('amp;');

console.log( qs );  

Ответ №2:

Чтобы преобразовать объект в строку, подходящую для использования в строке запроса URL, вы можете использовать:

jQuery.param(): Создайте сериализованное представление массива, простого объекта или объекта jQuery, подходящего для использования в строке запроса URL или запросе Ajax. В случае передачи объекта jQuery он должен содержать входные элементы со свойствами name / value.

 let paramObj = {
  name: 'title',
  properties: [01, 02, 03],
  rooms: [01],
  city: 'cityname'
}
let params = $.param(paramObj).replace(/[]/g, '');
let newurl = 'http://localhost:8080/endpoint?'   params;
console.log(newurl);  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>