Как заменить запятую на точку с запятой в качестве разделителя в url

#javascript #json

#javascript #json

Вопрос:

Я пытаюсь добавить комбинацию продуктов и количеств в конец строки url. Каждая комбинация продукта / количества разделяется точкой с запятой, а не запятой.

Вот что я сделал: https://test.com?products=81:1 ,77:1,107:1

Это то, что я хочу: https://test.com?products=81:1 ; 77:1;107:1

Приведенный ниже код показывает, как я создаю массив prods, а возвращаемые prods — это то, что добавляется в конец URL.

 json.forEach(function (obj) { 
    prods.push(obj.product_id   ':'   obj.quantity); 
});

return prods;
 

Ответ №1:

 return prods;
 

возвращает toString массива с разделителями-запятыми.

Просто измените на

 return prods.join(':');
 

На самом деле просто сделайте

 return json.map(obj => `${obj.product_id}:${obj.quantity}`).join(';');
 

Ответ №2:

Ниже приведен фрагмент кода, который создает «шаблон URL» на основе ваших критериев. Точка с запятой появляется при использовании join, который преобразует массив product:quantity в строку, объединенную точками с запятой.

Обратите внимание, что я решил, что вы могли бы использовать более универсальный подход, потому что вы не предоставляете нам структуру данных вашего JSON, поэтому созданный мной фрагмент не зависит от этого и вместо этого фокусируется на том, чтобы вы использовали результат по своему вкусу.

 var makeProductUrl = (array) => {
  var products,
      templateUrl = 'http://test.com?products=';

  products = array.map((elem) => { 
      return `${elem.product_id}:${elem.quantity}`;
  }).join(';')

  return `${templateUrl}${products}`;
};

var someArray = [
    {
      product_id: 'A',
      quantity: 1
    },
    {
      product_id: 'A',
      quantity: 123
    },
    {
      product_id: 'A',
      quantity: 88
    },
    {
      product_id: 'D',
      quantity: 12
    },
  ],
  url = makeProductUrl(someArray);

alert(url);