2016-12-31 75 views
0

我有以下for循环,我希望循环的输出被串化为一个查询字符串,如下面所需的输出所示。我正在使用qs npm软件包来对网址进行字符串化。如何将来自for循环的输出字符串化?

获得理想输出的最佳方法是什么?

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

可以改写你的问题?我认为我们都因为代码片段而误解了它。如果你想使用qs包,那么请显示你拥有的数据,如果你只想创建字符串,那么你不需要任何qs库,我们的答案是正确的。 Qs如果要将数据结构转换为查询,并且我没有看到任何数据结构,则在此处创建它以创建查询具有很小的意义,并且只需在答案中创建字符串查询即可。 –

+0

@MaciejSikora我有一个如下所示的JSON响应。我有一些我从API中获取的产品,所以我想通过循环来提取这些值并将它们放入查询字符串中。 “itemizations”: { “名”: “T恤”, “量”: “1.00000000”, “注意事项”: “普通的T恤”, “item_variation_name”: “白” } { “名”: “T恤”, “量”: “1.00000000”, “注意事项”: “普通的T恤”, “item_variation_name”: “白” } ] – iabramo

回答

2

而不是创建变量 - 创建字符串并在每个循环中做串联。

查看我的代码片段。

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

如果我要审查这些代码,我宁愿看到以下内容:

  • 避免串联。
  • 使用函数式编程。
  • 第三方的合理使用 - 所以是的,对于那些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; 
     } , {}) 

使用第三方

现在我会用querystringqueryParams到查询字符串

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));