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?


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

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


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.


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

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

Ś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


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


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

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

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

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/


1

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

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

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


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


0

Przykład użycia Array.filter:

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

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

-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'])
});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.