2010-01-12 27 views
26

Este código genera una cadena separada por comas para proporcionar una lista de identificadores para la cadena de consulta de otra página, pero hay una coma adicional al final de la cadena. ¿Cómo puedo eliminar o evitar esa coma adicional?Cómo quitar la última coma?

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

Respuesta

82

Uso Array.join

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

se convierte en:

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

+1 ... mucho mejor que toda esta subcadena torpe. – Filburt

+0

@Filburt No creo que sea su mejor solución porque el tiempo de procesamiento será más en comparación con el primero. –

+0

@NikhilAgrawal Debe proporcionar algunos resultados de prueba para probar eso. – Filburt

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

Simple es el mejor :-) –

+5

No es ** ** no el mejor * * porque no valida que el último caracter en la cadena realidad * * es un 'coma '. – Abela

2

El uso 'normal' javascript:

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

Usted puede utilizar el método String.prototype.slice con un negativo endSlice argumento:

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

o puede utilizar el método $.map a construya su cadena separada por comas:

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

alert(s); 
+0

Ah, pásame –

5

en vez de eliminarla, sólo tiene que saltar añadiendo en primer lugar:

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

¡Debo decir que este es un buen truco! +1 –

+0

La forma en que se intentó resolver es mejor, pero no funciona en absoluto. – Sanju

+0

@Sanju: ¿Qué sucede cuando intentas usarlo? ¿Recibes algún mensaje de error? – Guffa

2

A más primitivo forma es cambiar el each bucle en un for bucle

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

¿Por qué? Si necesita acceder al índice del elemento actual, '.each()' proporciona eso. – nnnnnn

1

respuesta de Sam es el mejor hasta ahora, pero creo que map sería una mejor opción que each en este caso. Estás transformando una lista de elementos en una lista de sus valores, y ese es exactamente el tipo de cosa para la que está diseñado el map.

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

Editar: ¡Vaya, echaba de menos que CMS se me adelantó el uso de map, él sólo lo ocultó bajo una sugerencia slice que me he saltado por encima.

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

Eso no es Javascript ... – nnnnnn

-1

escribir una función javascript:

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

utilizar de esta manera:

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

jsfiddle demo

+0

que no es un buen código. ¿y si escribo una coma entre los valores? –

0

se puede utilizar a continuación el método de extensión:

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

Para que pueda usarlo como:

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

Salida: hola.

para más métodos de extensión, marque a continuación enlace: Javascript helper methods

5

Usando substring

var strNumber = "3623,3635,"; 
 

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

Usando slice

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

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

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

Cuestiones relacionadas