2010-01-12 278 views
26

此代碼生成一個逗號分隔的字符串,以向另一頁的查詢字符串提供一個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> 

回答

82

使用Array.join

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

變爲:

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

+1 ...比所有這個子串摸索更好。 – Filburt 2010-01-12 08:13:16

+0

@Filburt我不認爲它是最好的解決方案,因爲處理時間會比第一個更多。 – 2014-10-01 07:14:40

+0

@NikhilAgrawal你應該提供一些測試結果來證明這一點。 – Filburt 2014-10-01 07:21:22

23
s = s.substring(0, s.length - 1); 
+0

簡單的就是最好的:-) – 2015-02-05 16:08:01

+5

不,它是** **不是在* *最好的,因爲它不驗證字符串中的最後一個字符實際上是* *一個'逗號'。 – Abela 2017-01-01 08:12:48

2

使用 '正常' 的javascript:

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

您可以使用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); 
+0

啊,打我吧 – 2010-01-12 08:02:49

5

而不是刪除它,你可以直接跳過在第一時間將其添加:

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

我必須說這是一個巧妙的把戲! +1 – 2010-01-12 08:11:21

+0

試圖解決的方式更好,但根本不起作用。 – Sanju 2010-01-29 11:44:37

+0

@三聚:當你嘗試使用它時會發生什麼?你有任何錯誤信息? – Guffa 2010-01-29 12:16:11

2

更原始方法是將each循環更改爲for

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

爲什麼?如果你需要訪問當前項目的索引,'.each()'確實提供了。 – nnnnnn 2016-09-02 04:25:07

1

薩姆的回答是最好的,到目前爲止,但我認爲map會比在這種情況下each一個更好的選擇。您正在將元素列表轉換爲其值的列表,這正是map的設計目的。

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

編輯:哎呀,我錯過了CMS打我使用map,他只是被人藏在一個slice建議,我跳過。

-1
s = s.TrimEnd(",".ToCharArray()); 
+1

這不是Javascript ... – nnnnnn 2016-09-02 04:25:45

-1

編寫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

+0

這不是一個好的代碼。如果我在值之間寫逗號怎麼辦? – 2017-05-31 12:44:21

0

您可以使用下面的擴展方法:

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

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(','));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

使用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(', '));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>