2011-01-03 11 views
5

tengo una petición AJAX que devuelve una lista de valores de la siguiente manera:¿Una forma elegante de convertir cadenas de valores en una matriz Javascript?

"1,2,3,4,5,6" 

necesito que sea una matriz de JavaScript con los números:

[1,2,3,4,5,6] 

me trataron:

var array = new Array("1,2,3,4,5,6".split(",")) 

Pero los números siguen siendo cadenas en la salida:

["1","2","3","4","5","6"] 

¿Hay alguna manera limpia de tenerlo como un conjunto numerado? Preferiblemente sin escribir una función para iterar a través de él?

Respuesta

13

Usted necesidad para recorrer y convertirlos en números, así:

var array = "1,2,3,4,5,6".split(","); 
for(var i=0; i<array.length; i++) array[i] = +array[i]; 

O bien, el ejemplo más tradicional:

var array = "1,2,3,4,5,6".split(","); 
for(var i=0; i<array.length; i++) array[i] = parseInt(array[i], 10); 
+2

sólo por el estilo, una más corta: 'for (var i = Array.length; i; array [- -i] = + matriz [i]); ' – Mic

0

Si confía en la respuesta Ajax, y si (por alguna razón) está comprometido a no usar un bucle, siempre puede ir con eval:

var str = "1,2,3,4,5,6"; 
var array = eval("[" + str + "]"); 
+0

eval tiene varios problemas propios (p. ej .: es mucho más lento que un bucle), no lo recomendaría si hay alguna otra opción disponible. – albertov

+1

O si no confía en la respuesta de ajax simplemente haga 'var array = JSON.parse ('[' + str + ']');' – Thomas

2

Un enfoque más centrado en el uso de jQuery-jQuery.map():

var str = "1,2,3,4,5,6"; 
var arr = $.map(str.split(","), function(el) { return parseInt(el, 10); }); 
1

No estoy seguro si esto cuenta como una función de la escritura, pero se puede utilizar la función de mapa de jQuery. Vi que aparece como una etiqueta, así que supongo que está utilizando:

var stringArray = "1,2,3,4,5,6".split(","); 
var numberArray = $.map(stringArray, 
    function(item, i) 
    { 
     return parseInt(item, 10); 
    }); 
0

Si no desea expliclty iterate puede utilizar array.map, la función javascript mapa.

array.map(callbackFunc, array); 

var arr = array.map(function(x) {return parseInt(x);}, "1,2,3,4,5,6".split(",")); 

http://www.tutorialspoint.com/javascript/array_map.htm

Theres probablemente una mejor referencia alguna parte pero no nos Javascript suficiente para tener un buen sitio de referencia favorito.

EDITAR - veo que jQuery tiene su propio mapa, que probablemente valga la pena investigar.

1

// jQuery debe tener una manera de hacer lo que cualquier navegador moderno puede hacer:

var str= "1,2,3,4,5,6"; 
var arr= str.split(',').map(Number); 

// returns an array of numbers 
Cuestiones relacionadas