2010-01-12 13 views
26

Questo codice genera una stringa separata da virgola per fornire un elenco di ID alla stringa di query di un'altra pagina, ma alla fine della stringa è presente una virgola aggiuntiva. Come posso rimuovere o evitare quella virgola extra?Come rimuovere l'ultima virgola?

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

risposta

82

Usa Array.join

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

diventa:

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

+1 ... molto meglio di tutte queste sottostringhe armeggianti. – Filburt

+0

@Filburt Non penso sia la soluzione migliore perché il tempo di elaborazione sarà più simile a quello di prima. –

+0

@NikhilAgrawal È necessario fornire alcuni risultati del test per provarlo. – Filburt

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

Semplice è il migliore :-) –

+5

Non è ** non ** * il migliore * perché non convalida che l'ultimo carattere della stringa in realtà * è * una 'virgola '. – Abela

2

Usando 'normale' javascript:

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

È possibile utilizzare il metodo String.prototype.slice con un negativo endSlice argomento:

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

oppure è possibile utilizzare il metodo $.map a crea la tua stringa separata da virgola:

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

alert(s); 
+0

Ah, bastonatemi –

5

invece di rimuoverlo, si può semplicemente ignorare l'aggiunta in primo luogo:

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

Devo dire che questo è un trucco pulito! +1 –

+0

Il modo provato per risolvere è migliore ma non funziona affatto. – Sanju

+0

@Sanju: Cosa succede quando provi ad usarlo? Ricevi un messaggio di errore? – Guffa

2

A più primitivo modo è quello di cambiare il ciclo each in un for ciclo

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

Perché? Se hai bisogno di accedere all'indice dell'elemento corrente, '.each()' lo fornisce. – nnnnnn

1

risposta di Sam è il migliore finora, ma credo che map sarebbe una scelta migliore rispetto each in questo caso. Stai trasformando un elenco di elementi in un elenco dei loro valori, e questo è esattamente il tipo di cosa per cui è stato progettato map.

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

Edit: Ops, ho perso che CMS mi ha battuto per l'utilizzo del map, ha appena nascose sotto un slice suggestione che ho saltato sopra.

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

Questo non è Javascript ... – nnnnnn

-1

Scrivete una funzione javascript:

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

usare in questo modo:

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

jsfiddle demo

+0

non è un buon codice. cosa succede se scrivo una virgola tra i valori? –

0

è possibile utilizzare sotto metodo di estensione:

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

In modo che si può utilizzare come:

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

uscita: ciao.

per ulteriori metodi di estensione, controllare sotto il collegamento: Javascript helper methods

5

Utilizzando substring

var strNumber = "3623,3635,"; 
 

 
document.write(strNumber.substring(0, strNumber.length - 1));

Utilizzando slice

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

Utilizzando 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>

Usa 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>

Problemi correlati