Virgülle ayrılmış bir dizeyi bir diziye nasıl dönüştürebilirim?


720

Ben bir döngü içine dönüştürmek istiyorum virgülle ayrılmış bir dize var, bu yüzden üzerinden döngü olabilir.

Bunu yapmak için yerleşik bir şey var mı?

Örneğin bu dizeye sahibim

var str = "January,February,March,April,May,June,July,August,September,October,November,December";

Şimdi bunu virgülle ayırmak ve sonra bir dizide saklamak istiyorum.


7
Sadece bu jquery gerektirmediğini yorumlamak istedim, bu javascript'in bir parçasıdır.
Chris


4
Yinelenen ile ilgili olarak: bu, atıfta bulunulan soruyu 18 ay öncesinden tutar. Bir şey varsa, diğeri sadece bir dupe değildir, ancak regex gereksinimi nedeniyle çok basit bir sorun için son derece karmaşık bir çözüm sunar
NotMe

40
Kolay. string.split(',');
Braden Best

4
Bunun neden "çok yerelleştirilmiş" olarak işaretlendiğinden emin değilim. Dize bölme bir gelir çok ve olup (cevabım hala bir şekilde düzenli upvotes alır gerçeği ile kanıtlandığı gibi) genellikle internetin dünya çapında bir kitleye uygulanabilir. Diğer 4 kişinin gelip yeniden açacağından şüpheliyim, ama yine de. Tuhaf.
Matchu

Yanıtlar:


1218
var array = string.split(',');

MDN referansı , çoğunlukla limitparametrenin beklenmedik davranışı için yararlıdır . (İpucu: "a,b,c".split(",", 2)ortaya çıkıyor ["a", "b"], değil ["a", "b,c"].)


3
Kısa ve tatlı, JavaScript'in stringJava'nın bazı zenginliklerine sahip olduğunu görmek güzel String.
Michael Shopsin

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

6
İken splitEminseniz irade çalışma cezası Eğer elemanları var array, bir sunucu / veritabanından veri bekliyor Eğer beri derde edecek ''.split(',')bir sahip length === 1IE:''.split(',') === ['']
oportocala

@MichaelShopsin ve All, split işlevi IE11 ile tanımlanmamış veya null referansın 'Split' özelliği alınamıyor.
DLV

@DLV yeni bir soru gibi geliyor, belki de StackOverflow zaten IE soruları kontrol ettikten sonra sormalısınız.
Michael Shopsin

130

1,2,3,4,5 gibi tamsayıları hedefleyip hedeflemediğinize dikkat edin. Dizinizin öğelerini, dizeyi böldükten sonra dize olarak değil, tamsayı olarak kullanmayı düşünüyorsanız, bunları bu biçime dönüştürmeyi düşünün.

var str = "1,2,3,4,5,6";
var temp = new Array();
// this will return an array with strings "1", "2", etc.
temp = str.split(",");

böyle bir döngü eklemek

for (a in temp ) {
    temp[a] = parseInt(temp[a], 10); // Explicitly include base as per Álvaro's comment
}

dizeleri değil tamsayıları içeren bir dizi döndürür.


47
Lütfen parseInt () öğesinin, siz açık bir şekilde ayarlamadığınız sürece tabanı tahmin etmeye çalıştığını ve bu nedenle baştaki sıfırlarla ( "001,002,003...") ilgilenirken beklenmeyen sonuçlara neden olabileceğini unutmayın . Karşılaştırma parseInt('010')ile parseInt('010', 10).
Álvaro González

3
Eđer yapabilseydim Alvaro'in yorumunu daha da yükseltirdim. Bu dersi bir süre önce öğrendim ve hiç unutmadım.
Antony Scott

2
+1 Bu örnek, dizenin statik bir nesne değil, aslında dizenin değişkeni olduğunu gösteren daha açıktır.
K0D4

5
mapFonksiyon tek satırda tamsayı ayrıştırma yapmak için kullanılabilir:str.split(',').map(parseInt)
Jud

1
Bu en etkili çözüm değil. Chrome 49 altında yaptığım deneylere göre. JSON.parse ('[' + str + ']') bu çözümden% 40 daha hızlı.
Yao

33

Bir dize her zaman virgül içerebileceğinden, Hmm bölünmesi tehlikelidir, aşağıdakilere dikkat edin:

var myArr = "a,b,c,d,e,f,g,','";
result = myArr.split(',');

Peki bunu nasıl yorumlarsın? ve sonucun ne olmasını İSTERSİNİZ? ile bir dizi:

['a', 'b', 'c', 'd', 'e', 'f', 'g', '\'', '\''] or 
['a', 'b', 'c', 'd', 'e', 'f', 'g', ',']

virgülten kaçsanız bile bir sorununuz olur.

Bunu çabucak bir araya getirdik:

(function($) {
    $.extend({
        splitAttrString: function(theStr) {
            var attrs = [];

            var RefString = function(s) {
                this.value = s;
            };
            RefString.prototype.toString = function() {
                return this.value;
            };
            RefString.prototype.charAt = String.prototype.charAt;
            var data = new RefString(theStr);

            var getBlock = function(endChr, restString) {
                var block = '';
                var currChr = '';
                while ((currChr != endChr) && (restString.value !== '')) {
                    if (/'|"/.test(currChr)) {
                        block = $.trim(block) + getBlock(currChr, restString);
                    }
                    else if (/\{/.test(currChr)) {
                        block = $.trim(block) + getBlock('}', restString);
                    }
                    else if (/\[/.test(currChr)) {
                        block = $.trim(block) + getBlock(']', restString);
                    }
                    else {
                        block += currChr;
                    }
                    currChr = restString.charAt(0);
                    restString.value = restString.value.slice(1);
                }
                return $.trim(block);
            };

            do {
                var attr = getBlock(',', data);
                attrs.push(attr);
            }
            while (data.value !== '');
            return attrs;
        }
    });
})(jQuery);

Kullanmak / düzenlemek için çekinmeyin :)


1
Bu, sayılarla da harika çalışır ve aşağıdaki başka bir cevapta belirtildiği gibi, onlar için ayrı bir parseInt döngüsü çalıştırmamız gerekmez. Bu gerçek derin düşünme. Çok takdir ve ben tüm arasında en iyi cevap düşünüyorum !!
Anmol Saraf

28

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

var array = string.split(',');

sonuç ne olurdu? örneğin var a = "merhaba, dünya, bebek" varsa; ve var dizi = a.split (','); -> dizim şöyle görünür: array = ["merhaba", "dünya", "bebek"]; ??
önemli geliştirici

1
Evet doğru. Ortaya çıkan dizi, tam da bahsettiğiniz gibi olacaktır.
Jakkwylde

Cevabınız benim için çalışıyor ancak yeni dizim eskisinin yerini almıyor. Bana yardımcı olabilir misiniz? var sampleTags = ['vinita@itsabacus.com']; console.log(sampleTags); $("#order_id").on("change", function() { var order_id = document.getElementById('order_id').value; $.ajax({url: "model/getUserMailIds.php",data:{order_id:order_id},type:'POST', success: function(result){ alert(result); var sampleTags = result.split(',');; console.log(sampleTags); }}); });
Vinita Pawar

16

Aşağıdakilere dikkat edin:

 var a = "";
var x = new Array();
x = a.split(",");
alert(x.length);

uyaracak 1


14

Virgülle Ayrılmış dizenizi bu işleve geçirin ve bir dizi döndürür ve virgülle ayrılmış dize bulunmazsa null değerini döndürür.

 function splitTheString(CommaSepStr) {
       var ResultArray = null; 

// Check if the string is null or so.
        if (CommaSepStr!= null) {


             var SplitChars = ',';
   // Check if the string has comma of not will go to else
                if (CommaSepStr.indexOf(SplitChars) >= 0) {
                    ResultArray = CommaSepStr.split(SplitChars);

                }
             else { 
  // string has only one value, can also check the length of the string or time and cross-check too. 
                    ResultArray = [CommaSepStr]; 
              }
        }
       return ResultArray ;
    }

3
Lütfen yalnızca bir kod bloğu göndermek yerine, bu kodun neden ortaya çıkan sorunu çözdüğünü açıklayın . Bir açıklama olmadan, bu bir cevap değildir.
Martijn Pieters

1
Dizenin bölünmüş değerinizi içereceğinden emin değilseniz, bu en doğru çözümdür. Bu işlev, dizede virgül yoksa (yukarıdaki örnekte verilen) split yönteminin hata vermesini önler.
CoryDorning

1
Not: büyük harfle başlayan işlevler çoğu zaman çağrılmak üzere tasarlanmıştır. çağrılacak şekilde tasarlanmamış işlevlerde küçük harfler kullanmak en iyisidir.
Jsterman

Virgül içermeyen tek bir değerim olduğunda bu benim için başarısız oldu. else { ResultArray = [CommaSepStr]; }İkinci if
bölümden

Teşekkür ekledim. o.
BJ Patel

8

Dönüş işlevi

var array = (new Function("return [" + str+ "];")());

kabul dizesi ve nesne dizeleri

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/


3
metin dizelerinde hatalar var - Sözdizimi Hatası: Beklenmeyen tanımlayıcı numarası dizeleri tamam. Örneğin. var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")());
Hata

7

Bu sorunun uzunca bir süredir cevaplandığını biliyorum, ancak katkımın bu konuyu araştıran diğerlerine faydalı olacağını düşündüm ...

Listede yalnızca bir öğe (ayırıcı karakter yok) olsa bile, bir dizeyi diziye dönüştürecek bir işlev şunlardır:

function listToAray(fullString, separator) {
  var fullArray = [];

  if (fullString !== undefined) {
    if (fullString.indexOf(separator) == -1) {
      fullAray.push(fullString);
    } else {
      fullArray = fullString.split(separator);
    }
  }

  return fullArray;
}

Şöyle kullanın:

var myString = 'alpha,bravo,charlie,delta';
var myArray = listToArray(myString, ',');
myArray[2]; // charlie

var yourString = 'echo';
var yourArray = listToArray(yourString, ',');
yourArray[0]; // echo

Bu işlevi oluşturdum çünkü splitdizede ayırıcı karakter yoksa bir hata atıyor (sadece bir öğe)


3
Ayırıcı bulunmazsa hata gönderilmez: 'echo'.split(',')döner ['echo']ve ''.split(',') döner ['']. Sen olacak Araman bir hata alıyorum x.split(',')ne zaman x(zaman dahil bir dize değil xedilir tanımsız veya boş hiçbir olmadığından,) splitdiğer türleri için kullanılabilir fonksiyonu.
Joel Lee

Ah, aslında splitlistToArray fonksiyonumu yazdığımda tanımsız bir nesne için kullanmaya çalıştığımı görüyorum. Bunu işaret ettiğiniz için teşekkürler ...
Kabb5

6

Ben benzer bir sorun vardı, ama daha karmaşık diziler bir dizi bir csv dönüştürmek gerektiği gibi (her satır içinde bir dizi öğe virgülle bölünmüş bir dizi öğesidir).

En kolay çözüm (ve daha güvenli bahse girerim), csv'yi bir dizi diziye dönüştüren bir " başlıksız " seçeneğe sahip PapaParse ( http://papaparse.com/ ) kullanmaktı. , "benim sınırlayıcı olarak.

Artı, bower'da kayıtlı, bu yüzden sadece şunları yapmak zorundaydım:

bower install papa-parse --save

ve sonra kodumda aşağıdaki gibi kullanın:

var arrayOfArrays = Papa.parse(csvStringWithEnters), {header:false}).data;

Gerçekten beğendim.


5
let str = "January,February,March,April,May,June,July,August,September,October,November,December"

let arr = str.split(',');

sonuç:

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

ve aşağıdakileri dönüştürmek istiyorsanız:

["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

bu:

"January,February,March,April,May,June,July,August,September,October,November,December";

kullanın:

str = arr.join(',')

3

bunun için iyi bir çözüm

let obj = ['A','B','C']

obj.map((c) => { return c. }).join(', ')

1

Virgülle ayrılmış dizeye dizeler dizisi için

let months = ["January","Feb"];
let monthsString = months.join(", ");

1

aşağıdaki snippet'i deneyebilirsiniz

 var str = "How,are,you,doing,today?";
    var res = str.split(",");
    console.log("My Result:",res)

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.