Bagaimana cara mengubah string yang dipisahkan koma ke array?

720

Saya memiliki string yang dipisahkan koma yang ingin saya konversikan menjadi array, jadi saya bisa memutarnya.

Apakah ada built-in untuk melakukan ini?

Misalnya saya punya string ini

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

sekarang saya ingin membaginya dengan koma, dan kemudian menyimpannya dalam array.

Blankman
sumber
7
Hanya ingin berkomentar bahwa ini tidak memerlukan jquery ini adalah bagian dari javascript itu sendiri.
Chris
4
Mengenai duplikat: ini mendahului pertanyaan yang dirujuk oleh 18 bulan. Jika ada, yang lain tidak hanya menipu tetapi menawarkan solusi yang sangat rumit untuk masalah yang sangat sederhana karena persyaratan regex
NotMe
40
Mudah. string.split(',');
Braden Best
4
Tidak yakin mengapa ini ditandai sebagai "terlalu terlokalisasi". String membelah muncul sebuah banyak , dan ini umumnya berlaku untuk pemirsa di seluruh dunia internet (sebagaimana dibuktikan oleh fakta bahwa jawaban saya masih entah bagaimana mendapat upvotes secara teratur). Saya ragu 4 orang lain akan datang dan membukanya lagi, tetapi, tetap saja. Aneh.
Matchu

Jawaban:

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

Referensi MDN , sebagian besar bermanfaat untuk perilaku yang mungkin tak terduga dari limitparameter. (Petunjuk: "a,b,c".split(",", 2)keluar ke ["a", "b"], bukan ["a", "b,c"].)

Matchu
sumber
3
Singkat dan manis, senang melihat bahwa JavaScript stringmemiliki beberapa kekayaan di Jawa String.
Michael Shopsin
Praktik terbaik untuk mendukung semua jenis string. Lihat di sini stackoverflow.com/a/32657055/2632619
Andi AR
6
Meskipun splitakan berfungsi dengan baik jika Anda yakin memiliki elemen di array''.split(',')length === 1''.split(',') === ['']
dalamnya
@MichaelShopsin dan All, fungsi split tidak berfungsi dengan IE11 karena tidak dapat memperoleh properti 'Split' dari referensi yang tidak ditentukan atau nol.
DLV
@DLV yang terdengar seperti pertanyaan baru, mungkin Anda harus bertanya setelah memeriksa pertanyaan IE yang sudah ada di StackOverflow.
Michael Shopsin
130

Hati-hati jika Anda membidik bilangan bulat, seperti 1,2,3,4,5. Jika Anda bermaksud menggunakan elemen-elemen array Anda sebagai bilangan bulat dan bukan sebagai string setelah memisahkan string, pertimbangkan untuk mengubahnya menjadi seperti itu.

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

menambahkan loop seperti ini

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

akan mengembalikan array yang berisi bilangan bulat, dan bukan string.

pop
sumber
47
Harap perhatikan bahwa parseInt () mencoba menebak basis kecuali jika Anda menetapkannya secara eksplisit, yang dapat menyebabkan hasil yang tidak terduga ketika berhadapan dengan nol di depan ( "001,002,003..."). Bandingkan parseInt('010')dengan parseInt('010', 10).
Álvaro González
3
Saya akan lebih meningkatkan komentar Alvaro jika saya bisa. Saya belajar pelajaran itu beberapa waktu lalu dan tidak pernah melupakannya.
Antony Scott
2
+1 Contoh ini lebih jelas, menunjukkan bahwa string bukan objek statis tetapi sebenarnya variabel itu adalah string.
K0D4
5
The mapfungsi dapat digunakan untuk melakukan parsing integer dalam satu baris:str.split(',').map(parseInt)
Jud
1
Ini bukan solusi yang paling efisien. Menurut percobaan saya di bawah Chrome 49. JSON.parse ('[' + str + ']') adalah 40% lebih cepat dari solusi ini.
Yao
33

Hmm split berbahaya karena string selalu dapat mengandung koma, perhatikan hal berikut:

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

Jadi bagaimana Anda menginterpretasikan hal itu? dan apa yang Anda INGIN hasilnya? sebuah array dengan:

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

bahkan jika Anda lolos dari koma Anda akan memiliki masalah.

Cepat-cepat mengotak-atik ini:

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

Jangan ragu untuk menggunakan / mengeditnya :)

Hanya aku
sumber
1
Ini berfungsi baik dengan angka juga dan kita tidak harus menjalankan parseInt loop terpisah untuk mereka seperti yang disebutkan dalam jawaban lain di bawah ini. Ini adalah pemikiran yang sangat dalam. Sangat menghargainya dan saya pikir jawaban terbaik di antara semuanya !!
Anmol Saraf
28

Metode split () digunakan untuk membagi string menjadi array substring, dan mengembalikan array baru.

var array = string.split(',');
Jakkwylde
sumber
apa hasilnya? misalnya jika saya memiliki var a = "halo, dunia, sayang"; dan var array = a.split (','); -> akankah array saya terlihat seperti ini: array = ["hello", "world", "baby"]; ??
pengembang penting
1
Ya itu benar. Array yang dihasilkan akan sama seperti yang Anda sebutkan.
Jakkwylde
Jawaban Anda berfungsi untuk saya, tetapi array baru saya tidak menggantikan yang lama. Bisakah kamu membantuku? var sampleTags = ['[email protected]']; 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

Perhatikan bahwa berikut ini:

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

akan mengingatkan 1

pengguna1386213
sumber
14

Lewati string Dipisahkan koma Anda ke fungsi ini dan itu akan mengembalikan array, dan jika tidak string yang dipisahkan koma ditemukan maka akan mengembalikan nol.

 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 ;
    }
BJ Patel
sumber
3
Daripada hanya memposting blok kode, tolong jelaskan mengapa kode ini menyelesaikan masalah yang ditimbulkan. Tanpa penjelasan, ini bukan jawaban.
Martijn Pieters
1
Ini adalah solusi yang paling benar jika Anda tidak yakin string akan berisi nilai split Anda. Fungsi ini akan menjaga metode split agar tidak salah jika string tidak memiliki koma (diberikan contoh di atas).
CoryDorning
1
Catatan: fungsi yang dimulai dengan huruf kapital sebagian besar waktu dirancang untuk dipanggil. lebih baik menggunakan huruf kecil pada fungsi yang tidak dirancang untuk dipanggil.
Jsterman
Ini gagal bagi saya ketika saya hanya memiliki satu nilai tanpa koma. Ditambahkan else { ResultArray = [CommaSepStr]; }setelah yang keduaif
Thomas Byy
Terima kasih telah menambahkan Itu.
BJ Patel
8

Fungsi pengembalian

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

itu menerima string dan objectstrings

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/

Andi AR
sumber
3
string teks mengalami kesalahan - SyntaxError: String nomor pengidentifikasi yang tidak diharapkan ok. misalnya. var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); hasilnya adalah: SyntaxError: Pengidentifikasi tak terduga
nycdanie
7

Saya tahu pertanyaan ini telah dijawab cukup lama, tetapi saya pikir kontribusi saya akan bermanfaat bagi orang lain yang meneliti topik ini ...

Berikut adalah fungsi yang akan mengubah string menjadi array, bahkan jika hanya ada satu item dalam daftar (tidak ada karakter pemisah):

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

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

  return fullArray;
}

Gunakan seperti ini:

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

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

Saya membuat fungsi ini karena splitmembuang kesalahan jika tidak ada karakter pemisah dalam string (hanya satu item)

Kabb5
sumber
3
Tidak ada kesalahan yang dilemparkan jika separator tidak ditemukan: 'echo'.split(',')kembali ['echo'], dan ''.split(',') kembali ['']. Anda akan mendapatkan kesalahan jika Anda menelepon x.split(',')saat xbukan string (termasuk kapan xtidak terdefinisi atau nol ), karena tidak ada splitfungsi yang tersedia untuk tipe lain.
Joel Lee
Ah, saya melihat bahwa saya sebenarnya mencoba menggunakan splituntuk objek yang tidak terdefinisi ketika saya menulis fungsi listToArray saya. Terima kasih telah menunjukkannya ...
Kabb5
6

Saya memiliki masalah yang sama, tetapi lebih kompleks karena saya perlu mengubah csv menjadi array array (setiap baris adalah satu elemen array yang di dalamnya memiliki array item dibagi dengan koma).

Solusi termudah (dan saya yakin lebih aman) adalah menggunakan PapaParse ( http://papaparse.com/ ) yang memiliki opsi "no-header" yang mengubah csv menjadi array array, plus, secara otomatis mendeteksi " , "sebagai pembatas saya.

Plus, terdaftar dalam bower, jadi saya hanya perlu:

bower install papa-parse --save

dan kemudian menggunakannya dalam kode saya sebagai berikut:

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

Saya sangat menyukainya.

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

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

itu akan menghasilkan:

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

dan jika Anda ingin mengonversi yang berikut ke:

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

ini:

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

menggunakan:

str = arr.join(',')
Mubeen Khan
sumber
3

solusi bagus untuk itu

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

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

Untuk array string ke string yang dipisahkan koma

let months = ["January","Feb"];
let monthsString = months.join(", ");
Srikanth Gowda
sumber
1

Anda dapat mencoba cuplikan berikut

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

Terpendek

str.split`,`

Kamil Kiełczewski
sumber