Convertir une chaîne avec des virgules en tableau

365

Comment puis-je convertir une chaîne en un tableau JavaScript?

Regardez le code:

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

Dans ce cas, une alertfenêtre contextuelle s'affichera 0,1. Quand ce serait un tableau, il ferait apparaître un 0, et quand il alert(array[1]);est appelé, il devrait faire apparaître le 1.

Est-il possible de convertir une telle chaîne en un tableau JavaScript?

Scott
la source
Selon la raison pour laquelle vous le souhaitez, les chaînes et les tableaux sont déjà très similaires (c'est- string[0] === '0'à- dire dans votre question), dans la plupart des cas, vous pouvez traiter une chaîne comme un tableau de caractères et utiliser des méthodes de tableau dessus.
Paul S.
@PaulS .: Cela échouera dans IE8 et inférieur.
Je déteste paresseux du
Meilleure pratique pour prendre en charge tous les types de chaînes. Voir ici stackoverflow.com/a/32657055/2632619
Andi AR

Réponses:

667

Pour les membres de tableau simples comme celui-ci, vous pouvez utiliser JSON.parse.

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

Cela vous donne un tableau de nombres.

[0, 1]

Si vous utilisez .split(), vous vous retrouverez avec un tableau de chaînes.

["0", "1"]

Sachez simplement que JSON.parsecela vous limitera aux types de données pris en charge. Si vous avez besoin de valeurs comme undefinedou de fonctions, vous devez utiliser eval()un analyseur JavaScript.


Si vous voulez utiliser .split(), mais vous voulez également un tableau de nombres, vous pouvez l'utiliser Array.prototype.map, bien que vous deviez le caler pour IE8 et le réduire ou simplement écrire une boucle traditionnelle.

var array = string.split(",").map(Number);
Je déteste paresseux
la source
4
Sachez également que ce JSON.parse();n'est pas disponible dans IE6, IE7. Je pense que dans ce cas, String.split(',');c'est plus facile.
scunliffe
@scunliffe: Vrai, une cale serait nécessaire, ou on pourrait adopter l'approche jQuery pour la caler var array = (new Function("return [" + string + "];"))(). L'utilisation .split()est correcte si les nombres ne sont pas nécessaires, sinon vous devrez mapper le résultat.
Je déteste lazy
11
@Downvoter: Essayez de décrire ce qui ne va pas avec la réponse afin que je puisse démontrer comment vous vous trompez.
Je déteste lazy
@I Hate Lazy Ceci ne prend pas en charge la chaîne d'objets.voir ici stackoverflow.com/a/32657055/2632619
Andi AR
@FarzadYZ Soyez prudent avec cela (en utilisant eval). Si le tableau contient des valeurs provenant de l'entrée côté client, cela ne sera pas sécurisé.
Flétrissement
119

Divisez- le sur le ,personnage;

var string = "0,1";
var array = string.split(",");
alert(array[0]);
Alex K.
la source
86

Ceci est facilement réalisé dans ES6 ;

Vous pouvez convertir des chaînes en tableaux avec Array.from ('chaîne') ;

Array.from("01")

va console.log

['0', '1']

C'est exactement ce que vous recherchez.

Ray Kim
la source
1
C'est génial. Je me suis déplacé mon code de JSON.parsela Array.frommod en utilisant ES6. MerciRay Kim
Eshwar Prasad Yaddanapudi
console.log (typeof Data); // string ========== var myArray = Array.from (Data); ============ console.log (typeof myArray); // L'objet ne prend pas en charge la propriété ou la méthode 'from' ========== Pourquoi est-ce?
Janatbek Sharsheyev
1
Mais Array.from("0, 1, 233")reviendrai ["0", ",", " ", "1", ",", " ", "2", "3", "3"], si je veux [0, 1, 233] ?
Tina Chen
17
Il s'agit de convertir chaque caractère unique en tant qu'élément de tableau. Mais nous n'avons besoin que de chaînes séparées par des virgules pour être des éléments de tableau. Ce n'est donc pas une solution valable.
Edison D'souza
1
Cette méthode n'est fiable que lorsque l'argument est une Setchaîne de caractères.
Josh Habdas
57

Si la chaîne est déjà au format liste, vous pouvez utiliser le JSON.parse:

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

Convertir tout type de chaînes

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/

Résultat dans la console

entrez la description de l'image ici

Certaines pratiques ne prennent pas en charge les chaînes d'objets

- 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"}"]
Andi AR
la source
Grande fonction Je l'utilise également mais malheureusement cela ne fonctionne PAS pour les chaînes ou les symboles: comme par exemple "0, s" des idées pour résoudre ce problème?
sqp_125
1
@ sqp_125 essayez 0, 's'?
Unreality
20

Pour les membres de tableau simples comme celui-ci, vous pouvez utiliser JSON.parse.

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

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

Cela vous donne un tableau de nombres.

maintenant la valeur de votre variable est comme array.length = 1

Sortie de valeur

array[0].ComplianceTaskID
array[0].RequirementTypeID
array[0].MissedRequirement
array[0].TimeOverdueInMinutes
Raghav Chaubey
la source
16

Une autre option utilisant l'ES6 utilise la syntaxe Spread .

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

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

Abhinav Galodha
la source
2
Impressionnant! Avec Array.from réponse, ils devraient être les seules réponses pour les solutions ES6.
Artyom Pranovich
10

utilisez la fonction de carte intégrée avec une fonction anonyme, comme ceci:

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

[modifier] voici comment vous l'utiliseriez

var string = "0,1";
var array = string.split(',').map(function(n) {
    return Number(n);
});
alert( array[0] );
Dan Mantyla
la source
1
Il s'agit de la réponse la plus généralement applicable. JSON ne peut pas être utilisé pour les délimiteurs arbitraires (par exemple, tabulation, espace, etc.)
javadba
Cela ne fonctionnera pas lorsque les valeurs de votre tableau sont des valeurs de chaîne pouvant contenir une virgule. Par exemple: "123, 'a string with a , comma', 456". Vous pouvez utiliser une expression rationnelle plus complexe pour gérer correctement de tels cas (par exemple quelque chose comme suggéré ici ).
Flétrissement
@Wilt bien non, mais vous pourriez utiliser regex pour résoudre ce problème
Dan Mantyla
1
Je ne voulais pas critiquer votre réponse, mais j'ai écrit cela parce que j'ai utilisé votre solution et que j'ai rencontré ce problème moi-même. Pensé à laisser le commentaire à d'autres qui pourraient rencontrer des problèmes similaires.
Flétrissement le
3

Plus d'exemples "Essayez-le vous-même" ci-dessous.

Définition et utilisation La méthode split () est utilisée pour diviser une chaîne en un tableau de sous-chaînes et renvoie le nouveau tableau.

Conseil: Si une chaîne vide ("") est utilisée comme séparateur, la chaîne est divisée entre chaque caractère.

Remarque: La méthode split () ne modifie pas la chaîne d'origine.

var res = str.split(",");
HAROONMIND
la source
3

Vous pouvez utiliser la javascript Spread Syntax pour convertir une chaîne en un tableau. Dans la solution ci-dessous, je supprime la virgule, puis convertis la chaîne en un tableau.

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

Comment convertir une chaîne séparée par des virgules en un tableau 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"]

Pour plus d'exemples de conversion de chaîne en tableau en javascript en utilisant les méthodes ci-dessous:

  1. Split () - Pas de séparateur:
  2. Split () - Séparateur de chaîne vide:
  3. Split () - Séparateur au début / fin:
  4. Séparateur d'expression régulière:
  5. Capture des parenthèses:
  6. Fractionner () avec l'argument limite

    consultez ce lien ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/

Développeur
la source
1

Je supprime les caractères '[', ']' et je fais une séparation avec ','

let array = stringObject.replace('[','').replace(']','').split(",").map(String);
Samuel Ivan
la source
0

Split (",") peut convertir des chaînes avec des virgules en un tableau de chaînes, voici mon extrait de code.

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

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

Hitesh Sahu
la source
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)

// => déclaration d'une expression régulière

[a-zA-Z0-9] => correspond à tous az, AZ, 0-9

(): => regrouper tous les éléments correspondants

$ 1 => la chaîne de remplacement fait référence au premier groupe de correspondance dans l'expression régulière.

g => drapeau global

KARTHIKEYAN.A
la source
0

Exemple utilisant Array.filter:

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

var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');
Abhimanyu
la source
-1

Pourquoi ne remplacez-vous pas la ,virgule et split('')la chaîne comme celle-ci qui se traduira par ['0', '1']ailleurs, vous pouvez envelopper le résultat dans parseInt()pour transformer l'élément en type entier.

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
Solution simple
la source