Làm thế nào để chuyển đổi một chuỗi được phân tách bằng dấu phẩy thành một mảng?


720

Tôi có một chuỗi được phân tách bằng dấu phẩy mà tôi muốn chuyển đổi thành một mảng, vì vậy tôi có thể lặp qua chuỗi đó.

Có bất cứ điều gì tích hợp để làm điều này?

Ví dụ: tôi có chuỗi này

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

bây giờ tôi muốn phân tách nó bằng dấu phẩy, và sau đó lưu trữ nó trong một mảng.


7
Chỉ muốn bình luận rằng điều này không yêu cầu jquery, đây là một phần của javascript.
Chris


4
Về trùng lặp: điều này có trước câu hỏi được tham chiếu trước 18 tháng. Nếu bất cứ điều gì, cái kia không chỉ là một bản dupe mà còn cung cấp một giải pháp cực kỳ phức tạp cho một vấn đề rất đơn giản do yêu cầu regex
NotMe

40
Dễ dàng. string.split(',');
Braden hay nhất

4
Không chắc chắn tại sao điều này được đánh dấu là "quá cục bộ". Việc tách chuỗi xuất hiện nhiều , và áp dụng chung cho các khán giả trên toàn thế giới của internet (được minh chứng bởi thực tế là câu trả lời của tôi vẫn bằng cách nào đó được upvotes thường xuyên). Tôi nghi ngờ 4 người khác sẽ đến và mở lại nó, nhưng, vẫn vậy. Kỳ dị.
Matchu

Câu trả lời:


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

Tham chiếu MDN , chủ yếu hữu ích cho hành vi có thể bất ngờ của limittham số. (Gợi ý: "a,b,c".split(",", 2)đi ra ["a", "b"], không phải ["a", "b,c"].)


3
Ngắn gọn và ngọt ngào, thật tuyệt khi thấy rằng JavaScript stringcó một số sự phong phú của Java String.
Michael Storesin

Thực hành tốt nhất để hỗ trợ tất cả các loại chuỗi. Xem tại đây stackoverflow.com/a/32657055/2632619
Andi AR

6
Mặc dù splitsẽ hoạt động tốt nếu bạn chắc chắn mình có các yếu tố array, nhưng nếu bạn mong đợi dữ liệu từ máy chủ / cơ sở dữ liệu, bạn sẽ gặp rắc rối kể từ khi ''.split(',')length === 1IE:''.split(',') === ['']
oportocala

@MichaelShopsin và Tất cả, chức năng phân tách không hoạt động với IE11 vì nó không thể có được thuộc tính 'Tách' của tham chiếu không xác định hoặc null.
DLV

@DLV nghe có vẻ như một câu hỏi mới, có lẽ bạn nên hỏi sau khi kiểm tra xung quanh các câu hỏi IE đã có trên StackOverflow.
Michael Storesin

130

Xem ra nếu bạn đang nhắm vào số nguyên, như 1,2,3,4,5. Nếu bạn định sử dụng các phần tử của mảng làm số nguyên chứ không phải là chuỗi sau khi tách chuỗi, hãy xem xét chuyển đổi chúng thành như vậy.

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

thêm một vòng lặp như thế này

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

sẽ trả về một mảng chứa các số nguyên chứ không phải các chuỗi.


47
Xin lưu ý rằng parseInt () cố gắng đoán cơ sở trừ khi bạn đặt nó rõ ràng, điều này có thể gây ra kết quả không mong muốn khi xử lý các số 0 đứng đầu ( "001,002,003..."). So sánh parseInt('010')với parseInt('010', 10).
Álvaro González

3
Tôi sẽ nâng cao nhận xét của Alvaro nhiều hơn nếu tôi có thể. Tôi đã học bài học đó một thời gian và không bao giờ quên nó.
Antony Scott

2
+1 Ví dụ này rõ ràng hơn, chứng minh rằng chuỗi không phải là một đối tượng tĩnh mà thực tế là biến đó là chuỗi.
K0D4

5
Các mapchức năng có thể được sử dụng để làm phân tích số nguyên trong một dòng:str.split(',').map(parseInt)
Jud

1
Đây không phải là giải pháp hiệu quả nhất. Theo các thử nghiệm của tôi trong Chrome 49. JSON.parse ('[' + str + ']') nhanh hơn 40% so với giải pháp này.
Yao

33

Tách Hmm là imho nguy hiểm vì một chuỗi luôn có thể chứa dấu phẩy, hãy tuân thủ các điều sau:

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

Vì vậy, làm thế nào bạn sẽ xen vào đó? và bạn muốn kết quả là gì? một mảng với:

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

ngay cả khi bạn thoát khỏi dấu phẩy, bạn sẽ gặp vấn đề.

Nhanh chóng giải quyết vấn đề này cùng nhau:

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

Hãy sử dụng / chỉnh sửa nó :)


1
Điều này cũng hoạt động rất tốt với các con số và chúng ta không phải chạy một vòng lặp parseInt riêng cho chúng như được đề cập trong một câu trả lời khác dưới đây. Đây là suy nghĩ sâu sắc thực sự. Đánh giá cao nó rất nhiều và tôi nghĩ rằng câu trả lời tốt nhất trong số tất cả !!
Anmol Saraf

28

Phương thức split () được sử dụng để phân tách một chuỗi thành một chuỗi các chuỗi con và trả về mảng mới.

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

kết quả sẽ ra sao? ví dụ nếu tôi có var a = "xin chào, thế giới, em bé"; và var mảng = a.split (','); -> mảng của tôi sẽ trông như thế này: mảng = ["xin chào", "thế giới", "em bé"]; ??
nhà phát triển trụ cột

1
Vâng, đó là chính xác. Mảng kết quả sẽ giống như bạn đề cập.
Jakkwylde

Câu trả lời của bạn đang làm việc cho tôi nhưng, mảng mới của tôi không thay thế cái cũ. Bạn có thể giúp tôi được không? 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

Lưu ý rằng như sau:

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

sẽ cảnh báo 1


14

Truyền chuỗi phân tách bằng dấu phẩy của bạn vào hàm này và nó sẽ trả về một mảng và nếu không tìm thấy chuỗi được phân tách bằng dấu phẩy thì sẽ trả về null.

 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
Thay vì chỉ đăng một khối mã, vui lòng giải thích lý do tại sao mã này giải quyết vấn đề được đặt ra. Không có lời giải thích, đây không phải là một câu trả lời.
Martijn Pieters

1
Đây là giải pháp chính xác nhất nếu bạn không chắc chuỗi sẽ chứa giá trị phân tách của bạn. Hàm này sẽ giữ cho phương thức phân tách không bị lỗi nếu chuỗi không có dấu phẩy (cho ví dụ trên).
CoryDorning

1
Lưu ý: hầu hết các chức năng bắt đầu bằng chữ in hoa thường được thiết kế để được gọi. tốt nhất để sử dụng các chữ cái viết thường trên các chức năng không được thiết kế để được gọi.
Jsterman

Điều này thất bại với tôi khi tôi chỉ có một giá trị không có dấu phẩy. Đã thêm else { ResultArray = [CommaSepStr]; }sau lần thứ haiif
Thomas Byy

Cảm ơn đã thêm. nó
BJ Patel

8

Hàm trả về

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

chuỗi chấp nhận và đối tượng của nó

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
chuỗi văn bản đang có lỗi - SyntaxError: Chuỗi số định danh không mong muốn là ok. ví dụ. var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); kết quả là: SyntaxError: Số nhận dạng bất ngờ
nycdanie

7

Tôi biết câu hỏi này đã được trả lời khá lâu, nhưng tôi nghĩ rằng sự đóng góp của tôi sẽ có ích cho những người khác nghiên cứu chủ đề này ...

Đây là một hàm sẽ chuyển đổi một chuỗi thành một mảng, ngay cả khi chỉ có một mục trong danh sách (không có ký tự phân tách):

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

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

  return fullArray;
}

Sử dụng nó như thế này:

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

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

Tôi đã tạo hàm này vì splitsẽ đưa ra một lỗi nếu không có ký tự phân tách trong chuỗi (chỉ có một mục)


3
Không có lỗi được ném nếu không tìm thấy dấu phân cách: 'echo'.split(',')trả về ['echo']''.split(',') trả về ['']. Bạn sẽ nhận được một lỗi nếu bạn gọi x.split(',')khi xkhông phải là một chuỗi (kể cả khi xđược undefined hoặc rỗng ), vì không có splitchức năng có sẵn với nhiều loại khác.
Joel Lee

Ah, tôi thấy rằng trên thực tế tôi đã cố gắng sử dụng splitcho một đối tượng không xác định khi tôi viết lên hàm listToArray của mình. Cảm ơn đã chỉ ra rằng ...
Kabb5

6

Tôi có một vấn đề tương tự, nhưng phức tạp hơn khi tôi cần chuyển đổi một csv thành một mảng các mảng (mỗi dòng là một thành phần mảng mà bên trong có một mảng các mục được phân tách bằng dấu phẩy).

Giải pháp đơn giản nhất (và an toàn hơn tôi đặt cược) là sử dụng PapaPude ( http://papapude.com/ ) có tùy chọn "không có tiêu đề" để chuyển csv thành một mảng các mảng, cộng với, nó tự động phát hiện " , "Là dấu phân cách của tôi.

Thêm vào đó, nó được đăng ký trong Bower, vì vậy tôi chỉ phải:

bower install papa-parse --save

và sau đó sử dụng nó trong mã của tôi như sau:

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

Tôi thực sự thích nó.


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

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

nó sẽ có kết quả:

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

và nếu bạn muốn chuyển đổi theo sau:

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

điều này:

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

sử dụng:

str = arr.join(',')

3

giải pháp tốt cho điều đó

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

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

1

Đối với mảng chuỗi được phân tách bằng dấu phẩy

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

1

bạn có thể thử đoạn trích sau

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.