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?


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);

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]);

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.


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);

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

Ó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


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);


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] );

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(",");

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])

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/


1

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

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

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


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


0

Exemplo usando Array.filter:

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

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

-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'])
});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.