Convertir cadenas con comas a matriz


365

¿Cómo puedo convertir una cadena en una matriz de JavaScript?

Mira el código:

var string = "0,1";
var array = [string];
alert(array[0]);

En este caso, alertaparecería una ventana emergente 0,1. Cuando sería una matriz, aparecería una ventana emergente 0, y cuando alert(array[1]);se llame, debería aparecer la ventana emergente 1.

¿Hay alguna posibilidad de convertir dicha cadena en una matriz de JavaScript?


Dependiendo de por qué quiere esto, las cadenas y las matrices ya son muy similares (es decir, string[0] === '0'en su pregunta), en la mayoría de los casos puede tratar una cadena como una matriz de caracteres y usar métodos de matriz en ella.
Paul S.

@PaulS .: Eso fallará en IE8 y versiones inferiores.
Odio a los perezosos el


Las mejores prácticas para soportar todo tipo de cadenas. Vea aquí stackoverflow.com/a/32657055/2632619
Andi AR

Respuestas:


667

Para miembros de matriz simples como ese, puede usar JSON.parse.

var array = JSON.parse("[" + string + "]");

Esto te da una matriz de números.

[0, 1]

Si lo usa .split(), terminará con una matriz de cadenas.

["0", "1"]

Solo tenga en cuenta que eso JSON.parselo limitará a los tipos de datos compatibles. Si necesita valores como undefinedo funciones, deberá usar eval()un analizador de JavaScript.


Si desea usar .split(), pero también desea una Matriz de números, puede usar Array.prototype.map, aunque necesitaría ajustarlo para IE8 y bajar o simplemente escribir un bucle tradicional.

var array = string.split(",").map(Number);

44
También tenga en cuenta que JSON.parse();no está disponible en IE6, IE7. Creo que en este caso String.split(',');es más fácil.
scunliffe

@scunliffe: Cierto, se necesitaría una cuña, o uno podría adoptar el enfoque jQuery para calzarla var array = (new Function("return [" + string + "];"))(). El uso .split()está bien si no se necesitan números, de lo contrario, debería asignar el resultado.
Odio a los perezosos el

11
@Downvoter: Intenta describir lo que está mal con la respuesta para que pueda demostrar cómo te equivocas.
Odio a los perezosos el

@ Odio Lazy Esto no es compatible con la cadena de objetos. Vea aquí stackoverflow.com/a/32657055/2632619
Andi AR

@FarzadYZ Tenga cuidado con eso (usando eval). Si la matriz contiene valores de entrada del lado del cliente, esto será inseguro.
marchita

119

Dividirlo en el ,personaje;

var string = "0,1";
var array = string.split(",");
alert(array[0]);

86

Esto se logra fácilmente en ES6 ;

Puede convertir cadenas en matrices con Array.from ('cadena') ;

Array.from("01")

will console.log

['0', '1']

Que es exactamente lo que estás buscando.


1
Esto es asombroso Moví mi código de JSON.parsea Array.fromcomo lo estoy usando ES6. GraciasRay Kim
Eshwar Prasad Yaddanapudi

console.log (tipo de datos); // string ========== var myArray = Array.from (Datos); ============ console.log (typeof myArray); // El objeto no admite la propiedad o el método 'from' ========== ¿Por qué es eso?
Janatbek Sharsheyev

1
Pero Array.from("0, 1, 233")volveremos ["0", ",", " ", "1", ",", " ", "2", "3", "3"], ¿y si quiero [0, 1, 233] ?
Tina Chen

17
Esto está convirtiendo cada carácter individual como un elemento de matriz. Pero solo necesitamos cadenas separadas por comas para ser elementos de matriz. Entonces no es una solución válida.
Edison D'souza

1
Este método solo es confiable cuando el argumento es una Setde cadenas.
Josh Habdas

57

Si la cadena ya está en formato de lista, puede usar el JSON.parse:

var a = "['a', 'b', 'c']";
a = a.replace(/'/g, '"');
a = JSON.parse(a);

24

Convierte todo tipo de cadenas

var array = (new Function("return [" + str+ "];")());



var string = "0,1";

var objectstring = '{Name:"Tshirt", CatGroupName:"Clothes", Gender:"male-female"}, {Name:"Dress", CatGroupName:"Clothes", Gender:"female"}, {Name:"Belt", CatGroupName:"Leather", Gender:"child"}';

var stringArray = (new Function("return [" + string+ "];")());

var objectStringArray = (new Function("return [" + objectstring+ "];")());

JSFiddle https://jsfiddle.net/7ne9L4Lj/1/

Resultado en consola

ingrese la descripción de la imagen aquí

Algunas prácticas no admiten cadenas de objetos

- JSON.parse("[" + string + "]"); // throw error

 - string.split(",") 
// unexpected result 
   ["{Name:"Tshirt"", " CatGroupName:"Clothes"", " Gender:"male-female"}", "      {Name:"Dress"", " CatGroupName:"Clothes"", " Gender:"female"}", " {Name:"Belt"",    " CatGroupName:"Leather"", " Gender:"child"}"]

Gran función También lo uso, pero desafortunadamente NO funciona para cadenas o símbolos: como, por ejemplo, "0, s" ¿alguna idea de cómo solucionarlo?
sqp_125

1
@ sqp_125 intente 0, 's'?
Irrealidad el

20

Para miembros de matriz simples como ese, puede usar JSON.parse.

var listValues = "[{\"ComplianceTaskID\":75305,\"RequirementTypeID\":4,\"MissedRequirement\":\"Initial Photo Upload NRP\",\"TimeOverdueInMinutes\":null}]";

var array = JSON.parse("[" + listValues + "]");

Esto te da una matriz de números.

ahora tu valor variable es como array.length = 1

Salida de valor

array[0].ComplianceTaskID
array[0].RequirementTypeID
array[0].MissedRequirement
array[0].TimeOverdueInMinutes


16

Otra opción que usa ES6 es usar la sintaxis Spread .

var convertedArray = [..."01234"];

var stringToConvert = "012";
var convertedArray  = [...stringToConvert];
console.log(convertedArray);


2
¡Increíble! Junto con la respuesta Array.from, deberían ser las únicas respuestas para las soluciones ES6.
Artyom Pranovich

10

use la función de mapa incorporada con una función anónima, así:

string.split(',').map(function(n) {return Number(n);});

[editar] así es como lo usarías

var string = "0,1";
var array = string.split(',').map(function(n) {
    return Number(n);
});
alert( array[0] );

1
Esta es la respuesta más generalmente aplicable. JSON no se puede usar para delimitadores arbitrarios (por ejemplo, tabulación, espacio, etc.)
javadba

Esto no funcionará cuando los valores de su matriz sean valores de cadena que posiblemente tengan una coma dentro. Por ejemplo: "123, 'a string with a , comma', 456". Podría usar una expresión regular más compleja para manejar estos casos correctamente (por ejemplo, algo como lo sugerido aquí ).
marchita

@Bueno, no, no lo haría, pero sí, podrías usar expresiones regulares para arreglar eso
Dan Mantyla

1
No quise criticar su respuesta, pero escribí esto porque usé su solución y me encontré con este problema. Pensé en dejar el comentario para otros que posiblemente tengan problemas similares.
marchita

3

Más ejemplos de "Pruébelo usted mismo" a continuación.

Definición y uso El método split () se utiliza para dividir una cadena en una matriz de subcadenas y devuelve la nueva matriz.

Sugerencia: Si se utiliza una cadena vacía ("") como separador, la cadena se divide entre cada carácter.

Nota: El método split () no cambia la cadena original.

var res = str.split(",");

3

Puede usar la Sintaxis de extensión de JavaScript para convertir cadenas en una matriz. En la solución a continuación, elimino la coma y luego convierto la cadena en una matriz.

var string = "0,1"
var array = [...string.replace(',', '')]
console.log(array[0])

2

¿Cómo convertir una cadena separada por comas en una matriz en JavaScript?

var string = 'hello, world, test, test2, rummy, words';
var arr = string.split(', '); // split string on comma space
console.log( arr );

//Output
["hello", "world", "test", "test2", "rummy", "words"]

Para obtener más ejemplos de conversión de cadena a matriz en javascript, utilice las siguientes formas:

  1. Split () - Sin separador:
  2. Split () - Separador de cadena vacío:
  3. Split () - Separador al principio / fin:
  4. Separador de expresión regular:
  5. Capturando paréntesis:
  6. Split () con argumento de límite

    mira este enlace ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/


1

Elimino los caracteres '[', ']' y hago una división con ','

let array = stringObject.replace('[','').replace(']','').split(",").map(String);

0

Split (",") puede convertir cadenas con comas en una matriz de cadenas, aquí está mi fragmento de código.

    var input ='Hybrid App, Phone-Gap, Apache Cordova, HTML5, JavaScript, BootStrap, JQuery, CSS3, Android Wear API'
    var output = input.split(",");
    console.log(output);

["Aplicación híbrida", "Phone-Gap", "Apache Cordova", "HTML5", "JavaScript", "BootStrap", "JQuery", "CSS3", "Android Wear API"]


0

var i = "[{a:1,b:2}]",
    j = i.replace(/([a-zA-Z0-9]+?):/g, '"$1":').replace(/'/g,'"'),
    k = JSON.parse(j);

console.log(k)

// => declarando expresión regular

[a-zA-Z0-9] => coincide con todos az, AZ, 0-9

(): => agrupar todos los elementos coincidentes

$ 1 => la cadena de reemplazo se refiere al primer grupo de coincidencia en la expresión regular.

g => bandera global


0

Ejemplo usando Array.filter:

var str = 'a,b,hi,ma,n,yu';

var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');

-1

¿Por qué no reemplaza una ,coma y split('')una cadena como esta que resultará en ['0', '1'], además, podría ajustar el resultado parseInt()para transformar el elemento en un tipo entero?

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.