Konwertuj ciąg znaków przecinkami na tablicę

365

Jak przekonwertować ciąg na tablicę JavaScript?

Spójrz na kod:

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

W takim przypadku alertwyskakuje okienko 0,1. Gdyby to była tablica, wyskakuje a 0, a kiedy alert(array[1]);jest wywoływana, powinna wyskakować 1.

Czy jest szansa na konwersję takiego ciągu na tablicę JavaScript?

Scott
źródło
W zależności od tego, dlaczego tego chcesz, ciągi i tablice są już bardzo podobne (tj. string[0] === '0'W twoim pytaniu), w większości przypadków możesz traktować ciąg jako tablicę znaków i używać na nim metod tablicowych.
Paul S.
@PaulS .: To zawiedzie w IE8 i niższych wersjach .
Nienawidzę leniwego
Najlepsza praktyka do obsługi wszystkich typów ciągów. Zobacz tutaj stackoverflow.com/a/32657055/2632619
Andi AR

Odpowiedzi:

667

W przypadku takich prostych elementów tablicy można użyć JSON.parse.

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

To daje tablicę liczb.

[0, 1]

Jeśli użyjesz .split(), skończysz z tablicą ciągów.

["0", "1"]

Pamiętaj, że JSON.parseograniczy to do obsługiwanych typów danych. Jeśli potrzebujesz wartości takich jak undefinedlub funkcji, musisz użyć eval()lub parsera JavaScript.


Jeśli chcesz użyć .split(), ale chcesz także tablicę liczb, możesz jej użyć Array.prototype.map, chociaż będziesz musiał ją przełożyć na IE8 i obniżyć lub po prostu napisać tradycyjną pętlę.

var array = string.split(",").map(Number);
Nienawidzę Lazy
źródło
4
Należy również pamiętać, że JSON.parse();nie jest dostępny w IE6, IE7. Myślę, że w tym przypadku String.split(',');jest łatwiej.
scunliffe
@scunliffe: To prawda, że ​​potrzebna będzie podkładka dystansowa lub można zastosować podejście jQuery, aby ją odsunąć var array = (new Function("return [" + string + "];"))(). Używanie .split()jest w porządku, jeśli liczby nie są potrzebne, w przeciwnym razie trzeba zmapować wynik.
Nienawidzę leniwego
10
@Downvoter: Spróbuj opisać, co jest nie tak z odpowiedzią, abym mógł wykazać, w jaki sposób się mylisz.
Nienawidzę leniwego
@I Hate Lazy To nie obsługuje obiektu string. Zobacz tutaj stackoverflow.com/a/32657055/2632619
Andi AR
@FarzadYZ Bądź ostrożny z tym (używanie eval). Jeśli tablica zawiera wartości z danych wejściowych po stronie klienta, nie będzie to bezpieczne.
Wilt
119

Podziel go na ,postać;

var string = "0,1";
var array = string.split(",");
alert(array[0]);
Alex K.
źródło
86

Można to łatwo osiągnąć w ES6 ;

Możesz przekonwertować ciągi znaków na tablice za pomocą Array.from ('string') ;

Array.from("01")

będzie console.log

['0', '1']

Właśnie tego szukasz.

Ray Kim
źródło
1
To jest niesamowite. Przeniosłem swój kod z JSON.parsena Array.frompodczas używania ES6. DziękujęRay Kim
Eshwar Prasad Yaddanapudi
console.log (typeof Data); // string ========== var myArray = Array.from (Data); ============ console.log (typeof myArray); // Obiekt nie obsługuje właściwości ani metody „from” ========== Dlaczego tak jest?
Janatbek Sharsheyev
1
Ale Array.from("0, 1, 233")wrócę ["0", ",", " ", "1", ",", " ", "2", "3", "3"], co jeśli chcę [0, 1, 233] ?
Tina Chen,
17
Konwertuje to każdy znak jako element tablicy. Ale potrzebujemy tylko ciągów oddzielonych przecinkami, aby być elementami tablicy. Więc nie jest to prawidłowe rozwiązanie.
Edison D'souza
1
Ta metoda jest niezawodna tylko wtedy, gdy argument jest Setciągiem znaków.
Josh Habdas
57

Jeśli ciąg jest już w formacie listy, możesz użyć pliku JSON.parse:

var a = "['a', 'b', 'c']";
a = a.replace(/'/g, '"');
a = JSON.parse(a);
otaviodecampos
źródło
24

Konwertuj wszystkie typy ciągów

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/

Wynik w konsoli

wprowadź opis zdjęcia tutaj

Niektóre praktyki nie obsługują ciągów obiektów

- 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
źródło
Świetna funkcja, której również używam, ale niestety NIE działa ona na ciągi znaków lub symbole: jak np. „0, s” jakieś pomysły, jak to naprawić?
sqp_125
1
@ sqp_125 spróbuj 0, 's'?
Unreality
19

W przypadku takich prostych elementów tablicy można użyć JSON.parse.

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

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

To daje tablicę liczb.

teraz wartość zmiennej jest podobna do array.length = 1

Wartość wyjściowa

array[0].ComplianceTaskID
array[0].RequirementTypeID
array[0].MissedRequirement
array[0].TimeOverdueInMinutes
Raghav Chaubey
źródło
16

Inną opcją przy użyciu ES6 jest użycie składni Spread .

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

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

Abhinav Galodha
źródło
2
Niesamowite! Wraz z Array.fr z odpowiedzi powinny być jedynymi odpowiedziami dla rozwiązań ES6.
Artyom Pranovich
10

użyj wbudowanej funkcji mapy z funkcją anonimową, na przykład:

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

[edytuj] oto, jak byś tego użył

var string = "0,1";
var array = string.split(',').map(function(n) {
    return Number(n);
});
alert( array[0] );
Dan Mantyla
źródło
1
To najczęściej stosowana odpowiedź. JSON nie może być używany do arbitralnych separatorów (np.
Tabulator
To nie zadziała, gdy wartości tablicowe są ciągami znaków, które mogą zawierać przecinek. Na przykład: "123, 'a string with a , comma', 456". Możesz użyć bardziej złożonego wyrażenia regularnego, aby poprawnie obsługiwać takie przypadki (na przykład coś takiego jak tutaj sugerowane ).
Wilt
@ Chciałbym, żeby nie, ale tak, możesz użyć wyrażenia regularnego, aby to naprawić
Dan Mantyla
1
Nie chciałem krytykować twojej odpowiedzi, ale napisałem to, ponieważ sam skorzystałem z twojego rozwiązania. Myśl o pozostawieniu komentarza innym może mieć podobne problemy.
Wilt
3

Więcej przykładów „Wypróbuj sam” poniżej.

Definicja i użycie Metoda split () służy do dzielenia łańcucha na tablicę podciągów i zwraca nową tablicę.

Wskazówka: Jeśli jako separator zostanie użyty pusty ciąg („”), ciąg zostanie podzielony między każdy znak.

Uwaga: Metoda split () nie zmienia oryginalnego ciągu.

var res = str.split(",");
HAROONMIND
źródło
3

Możesz użyć javascript Spread Syntax, aby przekonwertować ciąg znaków na tablicę. W poniższym rozwiązaniu usuwam przecinek, a następnie przekształcam ciąg znaków na tablicę.

var string = "0,1"
var array = [...string.replace(',', '')]
console.log(array[0])
p8ul
źródło
2

Jak przekonwertować ciąg oddzielony przecinkami na tablicę w 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"]

Więcej przykładów konwersji łańcucha na tablicę w javascript przy użyciu poniższych sposobów:

  1. Split () - Bez separatora:
  2. Split () - Pusty separator ciągów:
  3. Split () - Separator na początku / na końcu:
  4. Separator wyrażeń regularnych:
  5. Przechwytywanie nawiasów:
  6. Split () z argumentem ograniczenia

    sprawdź ten link ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/

Deweloper
źródło
1

Usuwam znaki „[”, „]” i dzielę za pomocą „,”

let array = stringObject.replace('[','').replace(']','').split(",").map(String);
Samuel Ivan
źródło
0

Split („,”) może konwertować ciągi z przecinkami na tablicę ciągów, oto mój fragment kodu.

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

[„Aplikacja hybrydowa”, „Phone-Gap”, „Apache Cordova”, „HTML5”, „JavaScript”, „BootStrap”, „JQuery”, „CSS3”, „Android Wear API”]

Hitesh Sahu
źródło
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)

// => deklarowanie wyrażenia regularnego

[a-zA-Z0-9] => dopasuj wszystkie az, AZ, 0-9

(): => zgrupuj wszystkie dopasowane elementy

$ 1 => ciąg zastępujący odnosi się do pierwszej grupy dopasowania w wyrażeniu regularnym.

g => globalna flaga

KARTHIKEYAN.A
źródło
0

Przykład użycia Array.filter:

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

var strArr = Array.prototype.filter.call(str, eachChar => eachChar !== ',');
Abhimanyu
źródło
-1

Dlaczego nie zastąpisz ,przecinka i split('')takiego ciągu, co spowoduje ['0', '1'], że możesz ponadto zawinąć wynik w, parseInt()aby przekształcić element w liczbę całkowitą.

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
Proste rozwiązanie
źródło