Converter string com vírgulas em array

365

Como posso converter uma string em uma matriz JavaScript?

Veja o código:

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

Nesse caso, alertapareceria um 0,1. Quando seria uma matriz, surgiria um 0e, quando alert(array[1]);é chamado, deve aparecer o 1.

Existe alguma chance de converter essa string em uma matriz JavaScript?

Scott
fonte
Dependendo do motivo, as strings e matrizes já são muito parecidas (ou seja, string[0] === '0'na sua pergunta), na maioria dos casos você pode tratar uma string como uma matriz de caracteres e usar métodos de matriz nela.
Paul S.
@PaulS .: Isso falhará no IE8 e inferior.
Eu odeio preguiçoso
Prática recomendada para oferecer suporte a todos os tipos de strings. Veja aqui stackoverflow.com/a/32657055/2632619
Andi AR

Respostas:

667

Para membros simples da matriz como esse, você pode usar JSON.parse.

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

Isso fornece uma matriz de números.

[0, 1]

Se você usar .split(), você terminará com uma matriz de seqüências de caracteres.

["0", "1"]

Esteja ciente de que JSON.parseo limitará aos tipos de dados suportados. Se você precisar de valores como undefinedfunções, precisará usar eval()ou um analisador JavaScript.


Se você deseja usar .split(), mas também deseja uma Matriz de Números, poderá usá-la Array.prototype.map, embora seja necessário ajustá-la para o IE8 e diminuir ou simplesmente escrever um loop tradicional.

var array = string.split(",").map(Number);
Eu odeio preguiçoso
fonte
4
Lembre-se também de que JSON.parse();não está disponível no IE6, IE7. Eu acho que, neste caso, String.split(',');é mais fácil.
scunliffe
@scunliffe: É verdade que um calço seria necessário, ou alguém poderia usar a abordagem jQuery para calçá-lo var array = (new Function("return [" + string + "];"))(). Usar .split()é bom se o Numbers não for necessário; caso contrário, você precisará mapear o resultado.
Eu Odeio preguiçoso
10
@ Downowner: Tente descrever o que está errado com a resposta para que eu possa demonstrar como você está errado.
Eu Odeio preguiçoso
@I Hate Lazy Isso não suporta string de objeto. Veja aqui stackoverflow.com/a/32657055/2632619
Andi AR
@FarzadYZ Tenha cuidado com isso (usando eval). Se a matriz contiver valores da entrada do lado do cliente, isso será inseguro.
murcha
119

Divida -o no ,personagem;

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

Isso é facilmente alcançado em ES6 ;

Você pode converter seqüências de caracteres em matrizes com Array.from ('string') ;

Array.from("01")

console.log

['0', '1']

Qual é exatamente o que você está procurando.

Ray Kim
fonte
11
Isso é incrível. Mudei meu código de JSON.parsepara Array.fromcomo estou usando ES6. ObrigadoRay Kim
Eshwar Prasad Yaddanapudi
console.log (tipo de dados); // string ========== var myArray = Array.from (Data); ============ console.log (typeof myArray); // O objeto não suporta propriedade ou método 'from' ========== Por que isso?
Janatbek Sharsheyev
11
Mas Array.from("0, 1, 233")vai voltar ["0", ",", " ", "1", ",", " ", "2", "3", "3"], e se eu quiser [0, 1, 233] ?
Tina Chen
17
Isso está convertendo cada caractere único como um elemento de matriz. Mas precisamos apenas de sequências separadas por vírgula para serem elementos da matriz. Portanto, não é uma solução válida.
Edison D'souza
11
Este método é confiável apenas quando o argumento é um Setde strings.
Josh Habdas 25/10/19
57

Se a sequência já estiver no formato de lista, você poderá usar o JSON.parse:

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

Converta todos os tipos de strings

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

insira a descrição da imagem aqui

Alguma prática não suporta seqüências 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"}"]
Andi AR
fonte
Ótima função Eu também a uso, mas infelizmente NÃO funciona com strings ou símbolos: como, por exemplo, "0, s", alguma idéia de como consertar isso?
Sql_125
11
@ sqp_125 tente 0, 's'?
Unreality
19

Para membros simples da matriz como esse, você pode usar JSON.parse.

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

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

Isso fornece uma matriz de números.

agora o valor da variável é como array.length = 1

Saída de valor

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

Outra opção usando o ES6 é usar a sintaxe de propagação .

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

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

Abhinav Galodha
fonte
2
Impressionante! Juntamente com a resposta Array.from, elas devem ser as únicas respostas para as soluções ES6.
Artyom Pranovich 2/17/17
10

use a função de mapa embutida com uma função anônima, da seguinte maneira:

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

[edit] aqui está como você o usaria

var string = "0,1";
var array = string.split(',').map(function(n) {
    return Number(n);
});
alert( array[0] );
Dan Mantyla
fonte
11
Essa é a resposta mais geralmente aplicável. JSON não pode ser usado para delimitadores arbitrários (por exemplo, guia, espaço, etc)
javadba
Isso não funcionará quando os valores de sua matriz forem valores de sequência que possivelmente tenham vírgula. Por exemplo: "123, 'a string with a , comma', 456". Você pode usar um regex mais complexo para lidar com esses casos corretamente (por exemplo, algo como sugerido aqui ).
Wilt
@Wilt bem não, não faria, mas sim, você poderia usar regex para consertar isso
Dan Mantyla
11
Não quis criticar sua resposta, mas escrevi isso porque usei sua solução e me deparei com esse problema. Pensou em deixar o comentário para outros, possivelmente com problemas semelhantes.
Wilt
3

Mais exemplos de "Experimente você mesmo" abaixo.

Definição e uso O método split () é usado para dividir uma string em uma matriz de substrings e retorna a nova matriz.

Dica: Se uma sequência vazia ("") for usada como separador, a sequência será dividida entre cada caractere.

Nota: O método split () não altera a sequência original.

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

Você pode usar a sintaxe de propagação javascript para converter a string em uma matriz. Na solução abaixo, removo a vírgula e converto a sequência em uma matriz.

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

Como converter string separada por vírgulas em uma matriz em 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 obter mais exemplos de converter string em array em javascript usando as maneiras abaixo:

  1. Split () - Sem separador:
  2. Split () - Separador de seqüência de caracteres vazio:
  3. Split () - Separador no início / fim:
  4. Separador de Expressão Regular:
  5. Capturando Parênteses:
  6. Split () com argumento de limite

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

Desenvolvedor
fonte
1

Eu removo os caracteres '[', ']' e divido com ','

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

Split (",") pode converter Strings com vírgulas em uma matriz String, aqui está o meu trecho 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);

["Aplicativo híbrido", "intervalo de telefone", "Apache Cordova", "HTML5", "JavaScript", "BootStrap", "JQuery", "CSS3", "API do Android Wear"]

Hitesh Sahu
fonte
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 expressão regular

[a-zA-Z0-9] => corresponde a todos os az, AZ, 0-9

(): => agrupa todos os elementos correspondentes

$ 1 => string de substituição refere-se ao primeiro grupo de correspondências na regex.

g => bandeira global

KARTHIKEYAN.A
fonte
0

Exemplo usando Array.filter:

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

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

Por que você não substitui ,vírgula e split('')a string como esta que resultará em ['0', '1'], além disso, você pode agrupar o resultado em parseInt()para transformar o elemento em tipo inteiro.

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
Solução Simples
fonte