Chuyển đổi chuỗi bằng dấu phẩy thành mảng


365

Làm cách nào tôi có thể chuyển đổi một chuỗi thành một mảng JavaScript?

Nhìn vào mã:

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

Trong trường hợp này, alertsẽ bật lên a 0,1. Khi nó là một mảng, nó sẽ bật lên 0và khi alert(array[1]);được gọi, nó sẽ bật lên 1.

Có bất kỳ cơ hội để chuyển đổi chuỗi đó thành một mảng JavaScript không?


Tùy thuộc vào lý do tại sao bạn muốn điều này, các chuỗi và mảng đã rất giống nhau (ví dụ như string[0] === '0'trong câu hỏi của bạn), trong hầu hết các trường hợp, bạn có thể coi một chuỗi là một mảng ký tự và sử dụng các phương thức mảng trên nó.
Paul S.

@PaulS.: Điều đó sẽ thất bại trong IE8 và thấp hơn.
Tôi ghét Lười


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

Câu trả lời:


667

Đối với các thành viên mảng đơn giản như vậy, bạn có thể sử dụng JSON.parse.

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

Điều này cung cấp cho bạn một dãy số.

[0, 1]

Nếu bạn sử dụng .split(), bạn sẽ kết thúc với một chuỗi các chuỗi.

["0", "1"]

Chỉ cần lưu ý rằng JSON.parsesẽ giới hạn bạn trong các loại dữ liệu được hỗ trợ. Nếu bạn cần các giá trị như undefinedhoặc hàm, bạn cần sử dụng eval()hoặc trình phân tích cú pháp JavaScript.


Nếu bạn muốn sử dụng .split(), nhưng bạn cũng muốn có một dãy số, bạn có thể sử dụng Array.prototype.map, mặc dù bạn cần phải sử dụng nó cho IE8 và hạ xuống hoặc chỉ viết một vòng lặp truyền thống.

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

4
Cũng cần lưu ý rằng JSON.parse();không có sẵn trong IE6, IE7. Tôi nghĩ trong trường hợp String.split(',');này là dễ dàng hơn.
scunliffe

@scunliffe: Đúng, sẽ cần một shim hoặc người ta có thể sử dụng cách tiếp cận jQuery để bắt chước nó var array = (new Function("return [" + string + "];"))(). Sử dụng .split()là ổn nếu Số không cần thiết, nếu không, bạn cần phải ánh xạ kết quả.
Tôi ghét Lười

10
@Downvoter: Cố gắng mô tả những gì sai với câu trả lời để tôi có thể chứng minh bạn đã sai như thế nào.
Tôi ghét Lười

@I Ghét Lười Điều này không hỗ trợ chuỗi đối tượng. Xem tại đây stackoverflow.com/a/32657055/2632619
Andi AR

@FarzadYZ Hãy cẩn thận với điều đó (sử dụng eval). Nếu mảng chứa các giá trị từ đầu vào phía máy khách thì điều này sẽ không an toàn.
Héo

119

Tách nó trên ,nhân vật;

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

86

Điều này dễ dàng đạt được trong ES6 ;

Bạn có thể chuyển đổi chuỗi thành Mảng với Array.from ('chuỗi') ;

Array.from("01")

sẽ console.log

['0', '1']

Đó chính xác là những gì bạn đang tìm kiếm.


1
Điều này thật tuyệt. Tôi đã chuyển mã của mình từ JSON.parsesang Array.fromđang sử dụng ES6. Cảm ơn bạnRay Kim
Eshwar Prasad Yaddanapudi

console.log (dữ liệu typeof); // chuỗi ========== var myArray = Array.from (Dữ liệu); ============ console.log (typeof myArray); // Đối tượng không hỗ trợ thuộc tính hoặc phương thức 'từ' ========== Tại sao lại như vậy?
Janatbek Sharsheyev

1
Nhưng Array.from("0, 1, 233")sẽ trở lại ["0", ",", " ", "1", ",", " ", "2", "3", "3"], nếu tôi muốn [0, 1, 233] thì sao?
Tina Chen

17
Đây là chuyển đổi mỗi ký tự đơn như là một phần tử mảng. Nhưng chúng ta chỉ cần các chuỗi được phân tách bằng dấu phẩy là các phần tử mảng. Vì vậy, không phải là một giải pháp hợp lệ.
Edison D'souza

1
Phương thức này chỉ đáng tin cậy khi đối số là một Setchuỗi.
Josh Habdas

57

Nếu chuỗi đã ở định dạng danh sách, bạn có thể sử dụng JSON.parse:

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

24

Chuyển đổi tất cả các loại chuỗi

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/

Kết quả trong giao diện điều khiển

nhập mô tả hình ảnh ở đây

Một số thực hành không hỗ trợ chuỗi đối tượng

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

Chức năng tuyệt vời Tôi cũng sử dụng nó nhưng tiếc là nó KHÔNG hoạt động cho các chuỗi hoặc ký hiệu: ví dụ như "0, s" có ý tưởng nào để khắc phục điều đó không?
sqp_125

1
@ sqp_125 thử 0, 's'?
hão huyền

19

Đối với các thành viên mảng đơn giản như vậy, bạn có thể sử dụng JSON.parse.

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

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

Điều này cung cấp cho bạn một dãy số.

bây giờ giá trị biến của bạn giống như mảng.length = 1

Giá trị đầu ra

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


16

Một tùy chọn khác sử dụng ES6 là sử dụng cú pháp lây lan .

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

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


2
Tuyệt vời! Cùng với câu trả lời Array.from họ nên là câu trả lời duy nhất cho các giải pháp ES6.
Artyom Pranovich

10

sử dụng chức năng bản đồ tích hợp với chức năng ẩn danh, như vậy:

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

[sửa] đây là cách bạn sẽ sử dụng nó

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

1
Đây là câu trả lời thường được áp dụng nhất. JSON không thể được sử dụng cho các dấu phân cách tùy ý (ví dụ: tab, dấu cách, v.v.)
javadba 2/2/2016

Điều này sẽ không hoạt động khi các giá trị mảng của bạn là các giá trị chuỗi có thể có dấu phẩy bên trong. Ví dụ : "123, 'a string with a , comma', 456". Bạn có thể sử dụng một biểu thức chính phức tạp hơn để xử lý các trường hợp như vậy một cách chính xác (ví dụ như một cái gì đó như được đề xuất ở đây ).
Héo

@ Hoàn toàn không, nhưng không, nhưng bạn có thể sử dụng regex để khắc phục điều đó
Dan Mantyla

1
Tôi không có ý chỉ trích câu trả lời của bạn, nhưng tôi đã viết điều này bởi vì tôi đã sử dụng giải pháp của bạn và tự mình xử lý vấn đề này. Nghĩ đến việc để lại bình luận cho những người khác có thể gặp phải vấn đề tương tự.
Héo

3

Thêm ví dụ "Tự mình thử" bên dưới.

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

Mẹo: Nếu một chuỗi trống ("") được sử dụng làm dấu phân cách, chuỗi được phân chia giữa mỗi ký tự.

Lưu ý: Phương thức split () không thay đổi chuỗi gốc.

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

3

Bạn có thể sử dụng Cú pháp lây lan javascript để chuyển đổi chuỗi thành một mảng. Trong giải pháp bên dưới, tôi loại bỏ dấu phẩy sau đó chuyển đổi chuỗi thành một mảng.

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

2

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

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

Để biết thêm Ví dụ về chuyển đổi chuỗi thành mảng trong javascript bằng các cách sau:

  1. Tách () - Không có Dấu phân cách:
  2. Split () - Dấu tách chuỗi rỗng:
  3. Tách () - Dấu phân cách khi bắt đầu / Kết thúc:
  4. Dấu tách biểu thức chính quy:
  5. Nắm bắt dấu ngoặc đơn:
  6. Tách () với đối số giới hạn

    kiểm tra liên kết này ==> https://www.tutsmake.com/javascript-convert-opes-to-array-javascript/


1

Tôi xóa các ký tự '[', ']' và phân tách bằng ','

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

0

Split (",") có thể chuyển đổi Chuỗi bằng dấu phẩy thành mảng Chuỗi, đây là đoạn mã của tôi.

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

["Ứng dụng lai", "Khoảng cách điện thoại", "Apache Cordova", "HTML5", "JavaScript", "BootStrap", "JQuery", "CSS3", "API mặc Android"]


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)

// => khai báo biểu thức chính quy

[a-zA-Z0-9] => khớp với tất cả az, AZ, 0-9

(): => nhóm tất cả các yếu tố phù hợp

$ 1 => chuỗi thay thế đề cập đến nhóm khớp đầu tiên trong regex.

g => cờ toàn cầu


0

Ví dụ sử dụng Array.filter:

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

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

-1

Tại sao bạn không thay thế ,dấu phẩy và split('')chuỗi như thế này sẽ dẫn đến ['0', '1'], hơn nữa, bạn có thể gói kết quả vào parseInt()để chuyển đổi phần tử thành kiểu số nguyên.

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
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.