【问题标题】:Finding last iteration in for in loop javascript在for循环javascript中查找最后一次迭代
【发布时间】:2013-05-17 07:40:00
【问题描述】:

我有以下示例代码

   var obj = { a: {b:1, c:3 }, d :{f:5}}
        var string = "";
        for(var key in obj){
            for(var subkey in obj[key]){
             string += subkey + "="+ obj[key][subkey] + "&";
             //for last iteration "&" should not be added.
         }
    }
   console.log(string);

输出是

b=1&c=3&f=5& 

所需输出

b=1&c=3&f=5

【问题讨论】:

  • 在这种特殊情况下,最简单的做法是简单地获取输出字符串的子字符串,以删除“&”。
  • 如果你使用的是 jQuery,那就交给 jQuery。不要自己编写 URL
  • 如果是传输参数,并且这是最终的查询字符串,只需将&留在末尾即可。没关系。
  • string += "&"+subkey + "="+ obj[key][subkey]; 最后做... string.substring(1)
  • 不是对问题的贡献,而是对您的情况的贡献:您确定您的子键是唯一的(例如,如果键 a 中的子键 b 键 d 中不能有子键 b)?

标签: javascript


【解决方案1】:

如果您要创建 url 的查询部分,我会使用此处提供的解决方案: How to create query parameters in Javascript?

如果没有,只需删除编码部分:)

相关代码副本:

// Usage:
//   var data = { 'first name': 'George', 'last name': 'Jetson', 'age': 110 };
//   var querystring = EncodeQueryData(data);
// 
function EncodeQueryData(data)
{
   var ret = [];
   for (var d in data)
      ret.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
   return ret.join("&");
}

【讨论】:

  • 你应该能够删除我认为的第一个 encodeURIComponent ,除非字段名称具有非 ascii 字符
【解决方案2】:

对于每个迭代,首先附加&,第一个除外。

var obj = { a: {b:1, c:3 }, d :{f:5}}
var string = "";
for(var key in obj){
   for(var subkey in obj[key]){
      if(string !== "") string += "&";
      string += subkey + "=" + obj[key][subkey];
    }
}

【讨论】:

    【解决方案3】:

    另一种方法是:

    var obj = { a: {b:1, c:3 }, d :{f:5}},
      array = [];
    for(var key in obj){
      for(var subkey in obj[key]){
        array.push(subkey + "="+ obj[key][subkey]);
      }
    }
    console.log(array.join('&'));
    

    【讨论】:

      【解决方案4】:

      在 for 循环之后你可以这样做:string = string.slice(0,-1)

      【讨论】:

      • string += "&"+subkey + "="+ obj[key][subkey];,最后是... string.substring(1)
      • @Christoph 抱歉,我评论正确但回答错误,因为 mplungjan 让我想想
      • @mplungjan 对不起 :( 我不明白,string.substring(1) 会先删除 char 如果我没记错的话,请多举例说明我也是网络语言的新手..跨度>
      • 是的,我将 & 移到了开头。
      猜你喜欢
      • 2016-08-25
      • 2011-07-11
      • 2013-03-18
      • 2021-07-28
      • 1970-01-01
      • 2019-06-04
      • 2016-05-10
      • 1970-01-01
      • 2010-09-22
      相关资源
      最近更新 更多