【问题标题】:How to Remove last Comma?如何删除最后一个逗号?
【发布时间】:2010-01-12 07:56:27
【问题描述】:

此代码生成一个逗号分隔的字符串,以向另一个页面的查询字符串提供 id 列表,但字符串末尾有一个额外的逗号。如何删除或避免多余的逗号?

<script type="text/javascript">
    $(document).ready(function() {
        $('td.title_listing :checkbox').change(function() {
            $('#cbSelectAll').attr('checked', false);
        });
    });
    function CotactSelected() {
        var n = $("td.title_listing input:checked");
        alert(n.length);
        var s = "";
        n.each(function() {
            s += $(this).val() + ",";
        });
        window.location = "/D_ContactSeller.aspx?property=" + s;
        alert(s);
    }
</script>

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    使用Array.join

    var s = "";
    n.each(function() {
        s += $(this).val() + ",";
    });
    

    变成:

    var a = [];
    n.each(function() {
        a.push($(this).val());
    });
    var s = a.join(', ');
    

    【讨论】:

    • @Filburt 我不认为这是最好的解决方案,因为与第一个相比,处理时间会更长。
    • @NikhilAgrawal 你应该提供一些测试结果来证明这一点。
    • @Filburt 如果是真的,我还没有正式验证过自己,它是否最好的解决方案仍然真的取决于你在做什么......可读性和可维护性通常比微优化更重要。
    【解决方案2】:
    s = s.substring(0, s.length - 1);
    

    【讨论】:

    • 简单就是最好的:-)
    • 不,它不是 最好的,因为它不验证字符串中的最后一个字符实际上是 comma.
    【解决方案3】:

    您可以将String.prototype.slice 方法与否定的endSlice 参数一起使用:

    n = n.slice(0, -1); // last char removed, "abc".slice(0, -1) == "ab"
    

    或者您可以使用$.map 方法来构建逗号分隔的字符串:

    var s = n.map(function(){
      return $(this).val();
    }).get().join();
    
    alert(s);
    

    【讨论】:

      【解决方案4】:

      您可以直接跳过添加它,而不是删除它:

      var s = '';
      n.each(function() {
         s += (s.length > 0 ? ',' : '') + $(this).val();
      });
      

      【讨论】:

      • @Sanju:当你尝试使用它时会发生什么?您收到任何错误消息吗?
      • 实际上它在没有任何错误消息的情况下不起作用。我已经按照我之前的方式完成了。
      • @Sanju:“不起作用”是什么意思?会发生什么,这与您的预期有何不同?
      【解决方案5】:

      使用substring

      var strNumber = "3623,3635,";
      
      document.write(strNumber.substring(0, strNumber.length - 1));

      使用slice

      document.write("3623,3635,".slice(0, -1));

      使用map

      var strNumber = "3623,3635,";
      
      var arrData = strNumber.split(',');
      
      document.write($.map(arrData, function(value, i) {
        return value != "" ? value : null;
      }).join(','));
      &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

      使用Array.join

      var strNumber = "3623,3635,";
      var arrTemp = strNumber.split(',');
      var arrData = [];
      
      $.each(arrTemp, function(key, value) {
        //document.writeln(value);
        if (value != "")
          arrData.push(value);
      });
      
      document.write(arrData.join(', '));
      &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

      【讨论】:

        【解决方案6】:

        使用“普通”javascript:

        var truncated = s.substring(0, s.length - 1);
        

        【讨论】:

          【解决方案7】:

          更原始的方法是将each循环改为for循环

          for(var x = 0; x < n.length; x++ ) {
            if(x < n.length - 1)
              s += $(n[x]).val() + ",";
            else
              s += $(n[x]).val();
          }
          

          【讨论】:

          • 为什么?如果您需要访问当前项目的索引,.each() 确实提供了。
          【解决方案8】:

          到目前为止,Sam 的答案是最好的,但在这种情况下,我认为 map 会比 each 更好。您正在将元素列表转换为它们的值列表,而这正是 map 的设计目的。

          var list = $("td.title_listing input:checked")
              .map(function() { return $(this).val(); })
              .get().join(', ');
          

          编辑:哎呀,我错过了 CMS 击败我使用 map,他只是将它隐藏在我跳过的 slice 建议下。

          【讨论】:

            【解决方案9】:

            您可以使用以下扩展方法:

            String.prototype.trimEnd = function (c) {
                c = c ? c : ' ';
                var i = this.length - 1;
                for (; i >= 0 && this.charAt(i) == c; i--);
                return this.substring(0, i + 1);
            }
            

            这样你就可以像这样使用它:

            var str="hello,";
            str.trimEnd(',');
            

            输出:你好

            更多扩展方法,请查看以下链接: Javascript helper methods

            【讨论】:

              【解决方案10】:

              这是一个简单的方法:

                  var str = '1,2,3,4,5,6,';
                  strclean = str+'#';
                  strclean = $.trim(strclean.replace(/,#/g, ''));
                  strclean = $.trim(str.replace(/#/g, ''));
              
              

              【讨论】:

                【解决方案11】:
                 s = s.TrimEnd(",".ToCharArray());
                

                【讨论】:

                  【解决方案12】:

                  编写一个javascript函数:

                  var removeLastChar = function(value, char){
                      var lastChar = value.slice(-1);
                      if(lastChar == char) {
                        value = value.slice(0, -1);
                      }
                      return value;
                  }
                  

                  像这样使用它:

                  var nums = '1,2,3,4,5,6,';
                  var result = removeLastChar(nums, ',');
                  console.log(result);
                  

                  jsfiddle demo

                  【讨论】:

                  • 这不是一个好的代码。如果我在值之间写一个逗号怎么办?
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-09-23
                  • 1970-01-01
                  • 2012-12-03
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多