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.


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


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.


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


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

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 = ['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

Perhatikan bahwa berikut ini:

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

akan mengingatkan 1


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

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/


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)


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.


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(',')

3

solusi bagus untuk itu

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

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

1

Untuk array string ke string yang dipisahkan koma

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

1

Anda dapat mencoba cuplikan berikut

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.