Converti stringa con virgole in array


365

Come posso convertire una stringa in un array JavaScript?

Guarda il codice:

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

In questo caso, alertapparirebbe a 0,1. Quando sarebbe un array, farebbe apparire un 0, e quando alert(array[1]);viene chiamato, dovrebbe apparire il 1.

C'è qualche possibilità di convertire tale stringa in un array JavaScript?


A seconda del motivo per cui lo desideri, le stringhe e le matrici sono già molto simili (ovvero string[0] === '0'nella tua domanda), nella maggior parte dei casi puoi trattare una stringa come una matrice di caratteri e usare metodi di matrice su di essa.
Paul S.

@PaulS .: Ciò non funzionerà in IE8 e versioni precedenti .
Odio Lazy il


Best practice per supportare tutti i tipi di stringhe. Vedi qui stackoverflow.com/a/32657055/2632619
Andi AR,

Risposte:


667

Per membri di array semplici come quello, è possibile utilizzare JSON.parse.

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

Questo ti dà una matrice di numeri.

[0, 1]

Se lo usi .split(), finirai con un array di stringhe.

["0", "1"]

Tieni presente che JSON.parseti limiterà ai tipi di dati supportati. Se hai bisogno di valori come undefinedo funzioni, devi utilizzare eval()o un parser JavaScript.


Se si desidera utilizzare .split(), ma si desidera anche una matrice di numeri, è possibile utilizzare Array.prototype.map, anche se sarebbe necessario shim per IE8 e inferiore o semplicemente scrivere un ciclo tradizionale.

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

4
Inoltre, tieni presente che JSON.parse();non è disponibile in IE6, IE7. Penso che in questo caso String.split(',');sia più facile.
scunliffe,

@scunliffe: Vero, sarebbe necessario uno spessore, oppure si potrebbe adottare l'approccio jQuery per evitarlo var array = (new Function("return [" + string + "];"))(). L'uso .split()va bene se i numeri non sono necessari, altrimenti dovresti mappare il risultato.
Odio Lazy il

11
@Downvoter: prova a descrivere cosa c'è di sbagliato nella risposta in modo da poter dimostrare come ti sbagli.
Odio il pigro il

@I Odio pigro Ciò non supporto oggetto string.see qui stackoverflow.com/a/32657055/2632619
Andi AR

@FarzadYZ Fai attenzione (usando eval). Se l'array contiene valori dall'input lato client, questo non sarà sicuro.
Wilt,

119

Dividilo sul ,personaggio;

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

86

Ciò è facilmente raggiungibile in ES6 ;

È possibile convertire stringhe in array con Array.from ('string') ;

Array.from("01")

console.log

['0', '1']

È esattamente quello che stai cercando.


1
Questo è bellissimo. Ho spostato il mio codice JSON.parsea Array.fromcome sto usando ES6. GrazieRay Kim
Eshwar Prasad Yaddanapudi,

console.log (tipo di dati); // string ========== var myArray = Array.from (Data); ============ console.log (tipo di myArray); // L'oggetto non supporta la proprietà o il metodo 'from' ========== Perché?
Janatbek Sharsheyev,

1
Ma Array.from("0, 1, 233")tornerò ["0", ",", " ", "1", ",", " ", "2", "3", "3"], e se volessi [0, 1, 233] ?
Tina Chen,

17
Questo sta convertendo ogni singolo carattere come elemento array. Ma abbiamo bisogno solo di stringhe separate da virgola per essere elementi dell'array. Quindi non è una soluzione valida.
Edison D'souza,

1
Questo metodo è affidabile solo quando l'argomento è una Setstringa.
Josh Habdas,

57

Se la stringa è già in formato elenco, è possibile utilizzare JSON.parse:

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

24

Converti tutti i tipi di stringhe

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/

Risultato nella console

inserisci qui la descrizione dell'immagine

Alcune pratiche non supportano le stringhe di oggetti

- 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"}"]

Ottima funzione anche io lo uso ma sfortunatamente NON funziona per stringhe o simboli: come ad esempio "0, s" qualche idea su come risolverlo?
sqp_125

1
@ sqp_125 provare 0, 's'?
Unreality il

20

Per membri di array semplici come quello, è possibile utilizzare JSON.parse.

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

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

Questo ti dà una matrice di numeri.

ora il valore della variabile è come array.length = 1

Valore in uscita

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


16

Un'altra opzione che utilizza ES6 è l'utilizzo della sintassi Spread .

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

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


2
Eccezionale! Insieme a Array.from answer, dovrebbero essere le uniche risposte per le soluzioni ES6.
Artyom Pranovich,

10

usa la funzione cartografica integrata con una funzione anonima, in questo modo:

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

[modifica] ecco come lo useresti

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

1
Questa è la risposta più generalmente applicabile. JSON non può essere utilizzato per delimitatori arbitrari (ad es
Tabulazione

Questo non funzionerà quando i valori dell'array sono valori stringa che possono contenere una virgola. Ad esempio: "123, 'a string with a , comma', 456". È possibile utilizzare una regex più complessa per gestire correttamente tali casi (ad esempio qualcosa come suggerito qui ).
Wilt,

@Wilt bene no, ma sì, potresti usare regex per risolvere il problema
Dan Mantyla,

1
Non intendevo criticare la tua risposta, ma l'ho scritto perché ho usato la tua soluzione e ho riscontrato questo problema da solo. Ho pensato di lasciare il commento per gli altri probabilmente incontrando problemi simili.
Appassisci il

3

Altri esempi "Provalo tu stesso" di seguito.

Definizione e utilizzo Il metodo split () viene utilizzato per dividere una stringa in una matrice di sottostringhe e restituisce la nuova matrice.

Suggerimento: se come separatore viene utilizzata una stringa vuota (""), la stringa viene suddivisa tra ciascun carattere.

Nota: il metodo split () non modifica la stringa originale.

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

3

È possibile utilizzare la sintassi di diffusione javascript per convertire la stringa in un array. Nella soluzione seguente, rimuovo la virgola quindi converto la stringa in un array.

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

2

Come convertire una stringa separata da virgola in una matrice in 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"]

Per ulteriori esempi di conversione di stringhe in array in JavaScript utilizzando i seguenti metodi:

  1. Dividi () - Nessun separatore:
  2. Split () - Separatore di stringhe vuoto:
  3. Dividi () - Separatore all'inizio / alla fine:
  4. Separatore di espressioni regolari:
  5. Catturare le parentesi:
  6. Split () con Limit Argument

    Dai un'occhiata a questo link ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/


1

Rimuovo i caratteri '[', ']' e faccio una divisione con ','

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

0

Split (",") può convertire stringhe con virgole in un array di stringhe, ecco il mio frammento di codice.

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

["App ibrida", "Phone-Gap", "Apache Cordova", "HTML5", "JavaScript", "BootStrap", "JQuery", "CSS3", "API Android Wear"]


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)

// => dichiarazione di espressione regolare

[a-zA-Z0-9] => corrisponde a tutti az, AZ, 0-9

(): => raggruppa tutti gli elementi corrispondenti

$ 1 => stringa di sostituzione si riferisce al primo gruppo di corrispondenze nella regex.

g => bandiera globale


0

Esempio usando Array.filter:

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

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

-1

Perché non sostituisci la ,virgola e split('')la stringa come questa che si tradurrà in ['0', '1'], inoltre, potresti avvolgere il risultato in parseInt()trasformare l'elemento in tipo intero.

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.