Virgül içeren dizeyi diziye dönüştürme


365

Bir dizeyi bir JavaScript dizisine nasıl dönüştürebilirim?

Koda bakın:

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

Bu durumda, alertaçılır bir a 0,1. Bir dizi 0olduğunda alert(array[1]);, bir pop-up açılır ve çağrıldığında 1,.

Bu dizeyi bir JavaScript dizisine dönüştürme şansı var mı?


Bunu neden istediğinize bağlı olarak, dizeler ve diziler zaten çok benzerdir (yani string[0] === '0'sorunuzda), çoğu durumda bir dizeyi karakter dizisi olarak ele alabilir ve üzerinde dizi yöntemleri kullanabilirsiniz.
Paul

@PaulS .: IE8 ve altında başarısız olur .
Tembel Nefret Ediyorum


Her türlü dizeyi desteklemek için en iyi uygulama. Buraya bakın stackoverflow.com/a/32657055/2632619
Andi AR

Yanıtlar:


667

Bunun gibi basit dizi üyeleri için kullanabilirsiniz JSON.parse.

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

Bu size bir dizi sayı verir.

[0, 1]

Eğer kullanırsanız .split(), bir dizi dizisi ile sonuçlanırsınız.

["0", "1"]

Sadece unutmayın JSON.parsedesteklenen veri türleri sizi sınırlar. undefinedVeya işlev gibi değerlere ihtiyacınız varsa eval(), bir JavaScript ayrıştırıcı kullanmanız gerekir .


Kullanmak istiyorsanız .split(), ancak aynı zamanda bir Sayı Dizisi istiyorsanız, Array.prototype.mapIE8 ve daha düşük bir değerle ya da yalnızca geleneksel bir döngü yazmanız gerekse de kullanabilirsiniz.

var array = string.split(",").map(Number);

4
Ayrıca JSON.parse();IE6, IE7'de bulunmadığını unutmayın. Bu durumda String.split(',');daha kolay olduğunu düşünüyorum .
scunliffe

@scunliffe: Doğru, bir şim gerekli olurdu, ya da jQuery yaklaşımı şimşek için kullanılabilir var array = (new Function("return [" + string + "];"))(). Kullanılması .split()Numaraları gerekli değilse, aksi takdirde sonuç haritaya ihtiyacım olacağını yolunda.
Tembel Nefret Ediyorum

10
@Downvoter: Nasıl yanlış olduğunuzu gösterebilmem için cevapta neyin yanlış olduğunu anlatmaya çalışın.
Tembel Nefret Ediyorum

@I Nefret Tembel Bu nesne dizesini desteklemiyor. Buraya bakın stackoverflow.com/a/32657055/2632619
Andi AR

@FarzadYZ Buna dikkat edin (kullanarak eval). Dizi istemci tarafı girişinden değerler içeriyorsa, bu güvenli olmayacaktır.
Solgunluk

119

,Karakter üzerinde bölün ;

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

86

Bu, ES6'da kolayca elde edilir ;

Dizeleri Array.from ('string') ile Dizilere dönüştürebilirsiniz ;

Array.from("01")

konsol.log olacak

['0', '1']

Tam da aradığınız şey bu.


1
Bu harika. Ben benim kod taşındı JSON.parseiçin Array.fromam olarak kullanarak ES6. EyvallahRay Kim
Eshwar Prasad Yaddanapudi

console.log (Veri türü); // string ========== var myArray = Array.from (Veri); ============ console.log (myArray türü); // Nesne, '='========== Neden özellik veya yöntemi desteklemiyor?
Janatbek Sharsheyev

1
Ama Array.from("0, 1, 233")geri dönecek ["0", ",", " ", "1", ",", " ", "2", "3", "3"], ne istersem [0, 1, 233] ?
Tina Chen

17
Bu, her bir karakteri bir dizi öğesi olarak dönüştürüyor. Ancak dizi öğeleri olarak yalnızca virgülle ayrılmış dizelere ihtiyacımız var. Yani geçerli bir çözüm değil.
Edison D'souza

1
Bu yöntem yalnızca argüman bir Setdize olduğunda güvenilirdir .
Josh Habdas

57

Dize zaten liste biçimindeyse, JSON.parse komutunu kullanabilirsiniz:

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

24

Her tür dizeyi dönüştür

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/

Sonuç konsolda

resim açıklamasını buraya girin

Bazı uygulamalar nesne dizelerini desteklemez

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

Büyük fonksiyon Ben de kullanmak ama ne yazık ki dizeleri veya sembolleri için işe yaramaz: örneğin "0, s" gibi herhangi bir fikir nasıl düzeltmek için?
sqp_125

1
@ sqp_125 0 deneyin, 's'?
Gerçeksizlik

19

Bunun gibi basit dizi üyeleri için JSON.parse kullanabilirsiniz.

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

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

Bu size bir dizi sayı verir.

Şimdi değişken değeri array.length = 1 gibidir

Değer çıktısı

array[0].ComplianceTaskID
array[0].RequirementTypeID
array[0].MissedRequirement
array[0].TimeOverdueInMinutes


16

ES6'yı kullanan başka bir seçenek de Spread sözdizimini kullanmaktır .

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

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


2
Müthiş! Array.from cevabı ile birlikte ES6 çözümleri için tek cevap onlar olmalıdır.
Artyom Pranovich

10

yerleşik harita işlevini şu şekilde anonim bir işlevle kullanın:

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

[değiştir] onu nasıl kullanacağın

var string = "0,1";
var array = string.split(',').map(function(n) {
    return Number(n);
});
alert( array[0] );

1
Bu en genel olarak uygulanabilir cevaptır. JSON keyfi sınırlayıcılar için kullanılamaz (örn. Sekme, boşluk vb.)
javadba

Dizi değerleriniz içinde virgül olabilecek dize değerleri olduğunda bu çalışmaz. Örneğin: "123, 'a string with a , comma', 456". Bu gibi durumları doğru bir şekilde ele almak için daha karmaşık bir normal ifade kullanabilirsiniz (örneğin burada önerildiği gibi ).
Solgunluk

@ İyi değil hayır, ama evet bunu düzeltmek için regex kullanabilirsiniz
Dan Mantyla

1
Cevabınızı eleştirmek istemedim, ama yazdım çünkü çözümünüzü kullandım ve bu konuya kendim girdim. Muhtemelen benzer sorunlarla karşılaşan diğerleri için yorum bırakmayı düşündüm.
Wilt

3

Aşağıdaki "Kendiniz Deneyin" örnekleri.

Tanım ve Kullanım split () yöntemi, bir dizeyi bir alt dizeler dizisine bölmek için kullanılır ve yeni diziyi döndürür.

İpucu: Ayırıcı olarak boş bir dize ("") kullanılırsa, dize her karakter arasında bölünür.

Not: split () yöntemi orijinal dizeyi değiştirmez.

var res = str.split(",");

3

Dizeyi bir diziye dönüştürmek için javascript Spread Sözdizimini kullanabilirsiniz . Aşağıdaki çözümde, virgül kaldırır ve dizeyi bir diziye dönüştürürüm.

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

2

Virgülle Ayrılmış Dizeyi JavaScript'te Diziye Dönüştürme

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

Aşağıdaki yolları kullanarak dizeyi javascript dizisine dönüştürme Daha Fazla Örnek için:

  1. Split () - Ayırıcı Yok:
  2. Split () - Boş Dize Ayırıcı:
  3. Split () - Başlangıç ​​/ Bitişte Ayırıcı:
  4. Düzenli İfade Ayırıcı:
  5. Parantez Yakalama:
  6. Limit Bağımsız Değişkeniyle Split ()

    bu bağlantıya göz atın ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/


1

'[', ']' Karakterlerini kaldırıyorum ve ',' ile ayırıyorum

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

0

Split (",") virgül içeren Dizeleri bir String dizisine dönüştürebilir, işte kod snippet'im.

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

["Karma Uygulama", "Telefon Boşluğu", "Apache Cordova", "HTML5", "JavaScript", "BootStrap", "JQuery", "CSS3", "Android Wear API'sı"]


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üzenli ifade bildirme

[a-zA-Z0-9] => tüm az, AZ, 0-9 ile eşleş

(): => eşleşen tüm öğeleri gruplandır

$ 1 => yedek dize, normal ifadedeki ilk eşleme grubunu ifade eder.

g => küresel bayrak


0

Kullanarak örnek Array.filter:

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

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

-1

Neden ,virgül ve split('')bunun gibi dizeyi değiştirmiyorsunuz ['0', '1'], bunun sonucu olarak parseInt()öğeyi tamsayı türüne dönüştürmek için sonucu sarabilirsiniz .

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.