2016-12-31 3 views
0

У меня есть следующий цикл for, и я хотел бы, чтобы выход цикла был стрифицирован в строку запроса, как показано на нужном выходе ниже. Я использую пакет npm qs для создания URL-адресов.Как я могу вывести вывод из цикла for?

Каков наилучший способ получения желаемого результата?

for (i = 0; i < 2; i++) { 
     var foo = "pr" + [i] + "va"; 
     var bar = "value"; 
    }; 
    //Desired output: ?pr0va=value&pr1va=value 
+0

может вы перефразировать вопрос? Я думаю, мы все неправильно понимаем это из-за фрагмента кода. Если вы хотите использовать qs-пакет, то, пожалуйста, покажите, какие у вас есть данные, если вы хотите просто создать строку, тогда вам не нужна никакая qs lib, и наши ответы верны. Qs, если для преобразования структур данных в запрос, и я не вижу никакой структуры данных, создавая его здесь для создания запроса, имеет небольшой смысл, и то же самое будет просто создавать строковый запрос, как в ответах. –

+0

@MaciejSikora У меня есть ответ JSON, который выглядит следующим образом. У меня есть несколько продуктов, которые я вытаскиваю из API, поэтому я хочу их прокрутить, чтобы вытащить значения и поместить их в строку запроса. "itemizations": [ { "имя": "T-Shirt", "количество": "1.00000000", "заметки": "Обычная футболка", "item_variation_name": "Белый" } { "имя": "T-Shirt", "количество": "1,00000000", "заметки": "Обычная футболка", "item_variation_name": "Белые" } ] – iabramo

ответ

2

Вместо создания переменных - создайте String и выполните конкатенацию в каждом цикле.

Проверьте мой фрагмент кода.

var query = ""; 
 
    var size = 2; 
 

 
    for (i = 0; i < size; i++) { 
 
     query += "pr" + [i] + "va=value"; 
 
     
 
     if (i+1<size) 
 
     query += "&"; 
 
    }; 
 

 
    console.log(query);

+0

Совершенная, благодаря! – iabramo

+0

@iabramo Нет проблем! –

0

Что-то вроде этого?

var output = '?'; 
 

 
    for (i = 0; i < 2; i++) { 
 
     var foo = "pr" + [i] + "va"; 
 
     var bar = "value"; 
 
     output += foo + "=" + bar + "&"; 
 
    }; 
 

 
    console.log(output); 
 

 
    //Desired output: ?pr0va=value&pr1va=value

1

Это должно работать для вас.

function test() { 
    var i =0; 
    var arr = []; 
    for(i=0;i<2;i++) { 
    arr.push("pr" + [i] + "va=value"); 
    } 
    console.log('?' + arr.join('&').toString()) 
} 
0

Вы можете сделать это следующим образом.

var output = "?"; 
 
for (i = 0; i < 2; i++) { 
 
    output += "pr" + [i] + "va=value&"; 
 
}; 
 
console.log(output.slice(0, -1))

0

Если бы я был рассмотреть такой код, который я предпочел бы видеть следующее:

  • Избегайте конкатенации.
  • Использование функционального программирования.
  • Разумное использование 3-й стороны - да так для querystring

Все те для читаемости, простоты и ремонтопригодности выгоды. И я признаю, что это спорно ..поэтому, пожалуйста, не спорит :)

Я буду использовать свой код в качестве основы и улучшить оттуда

for (i = 0; i < 2; i++) { 
     var foo = "pr" + [i] + "va"; 
     var bar = "value"; 
    }; 

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

Избегайте конкатенации

Я не буду конкатенацию с использованием шаблона буквального

for (i = 0; i < 2; i++) { 
    `pr${i}va=value`; 
}; 

Использование функционального программирования

Я Переберем чисел с использованием массива, и уменьшить, чтобы построить объект

const queryParams = Array(2).fill().reduce((object, value, index) => { 
      object[`pr${index}va`] = 'value'; 
      return object; 
     } , {}) 

Используя 3-й партии

Теперь я буду использовать querystring превратить queryParams в запрос строка

return querystring.stringify(queryParams); 

Все вместе сейчас

/** 
    * @param {number} count - number of query parameters to generate 
    * @returns {string} query string. for example for count=2 will return `pr1va=value&pr2va=value` 
    **/ 
function generateQueryString(count=2){ 
    const queryParams = Array(count).fill().reduce((object, value, index) => { // convert N number to key-value map using reduce 
      object[`pr${index}va`] = 'value'; 
      return object; 
     } , {}); 
     return querystring.stringify(queryParams);   
} 
0

Вы можете создать массив размера, петли, а затем присоединиться к нему:

function createString(size) { 
 
    return new Array(size).fill(0).map((v, i) => { 
 
    \t return "pr" + i + "va=value"; 
 
    }).join("&"); 
 
} 
 

 
console.log(createString(2));