แปลงสตริงด้วยเครื่องหมายจุลภาคเป็นอาร์เรย์


365

ฉันจะแปลงสตริงเป็นอาร์เรย์ JavaScript ได้อย่างไร

ดูรหัส:

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

ในกรณีนี้จะป๊อปอัพalert 0,1เมื่อมันจะเป็นอาร์เรย์ก็จะปรากฏขึ้น0และเมื่อถูกเรียกก็จะปรากฏขึ้นalert(array[1]);1

มีโอกาสใดที่จะแปลงสตริงดังกล่าวเป็นอาร์เรย์ JavaScript หรือไม่


ขึ้นอยู่กับสาเหตุที่คุณต้องการสตริงและอาร์เรย์นั้นคล้ายกันมาก (เช่นstring[0] === '0'ในคำถามของคุณ) ในกรณีส่วนใหญ่คุณสามารถใช้สตริงเป็นอาร์เรย์ของอักขระและใช้วิธีการของอาร์เรย์
Paul S.

@PaulS: นั่นจะล้มเหลวใน IE8 และต่ำกว่า
ฉันเกลียด Lazy


วิธีปฏิบัติที่ดีที่สุดสำหรับการสนับสนุนสตริงทุกประเภท ดูที่นี่stackoverflow.com/a/32657055/2632619
Andi AR

คำตอบ:


667

JSON.parseสำหรับสมาชิกของอาร์เรย์ที่เรียบง่ายเช่นเดียวกับที่คุณสามารถใช้

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

สิ่งนี้ทำให้คุณมีอาร์เรย์ของตัวเลข

[0, 1]

หากคุณใช้.split()คุณจะจบลงด้วยอาร์เรย์ของสตริง

["0", "1"]

เพิ่งทราบว่าJSON.parseจะ จำกัด คุณไว้ที่ประเภทข้อมูลที่รองรับ หากคุณต้องการค่าเช่นundefinedหรือฟังก์ชั่นคุณจะต้องใช้eval()หรือตัวแยกวิเคราะห์ JavaScript


หากคุณต้องการใช้.split()แต่คุณต้องการ Array of Numbers คุณสามารถใช้Array.prototype.mapแม้ว่าคุณจะต้องใช้มันสำหรับ IE8 และต่ำกว่าหรือเพียงแค่เขียนวนซ้ำดั้งเดิม

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

4
ระวังด้วยว่าJSON.parse();ไม่มีใน IE6, IE7 ฉันคิดว่าในกรณีนี้String.split(',');มันง่ายกว่า
scunliffe

@scunliffe: ทรูเป็นผู้ชิมจะต้องหรือหนึ่งอาจจะใช้วิธีการ jQuery เพื่อ Shim var array = (new Function("return [" + string + "];"))()มัน การใช้.split()ไม่เป็นไรถ้าไม่จำเป็นต้องใช้ตัวเลขไม่เช่นนั้นคุณจะต้องแมปผลลัพธ์
ฉันเกลียด Lazy

10
@Downvoter: พยายามอธิบายสิ่งที่ผิดกับคำตอบเพื่อที่ฉันจะได้แสดงให้เห็นว่าคุณผิดอย่างไร
ฉันเกลียด Lazy

@I Hate Lazy นี่ไม่รองรับ object string.see here stackoverflow.com/a/32657055/2632619
Andi AR

@FarzadYZ ระวังด้วย (ใช้eval) หากอาร์เรย์มีค่าจากอินพุตฝั่งไคลเอ็นต์สิ่งนี้จะไม่ปลอดภัย
Wilt


86

สิ่งนี้สามารถทำได้อย่างง่ายดายในES6 ;

คุณสามารถแปลงสตริงเป็น Array ด้วยArray.from ('string') ;

Array.from("01")

จะ console.log

['0', '1']

ซึ่งเป็นสิ่งที่คุณกำลังมองหา


1
นี่มันเจ๋งมาก. ผมย้ายจากรหัสของฉันJSON.parseจะเป็นฉันใช้Array.from ES6ขอขอบคุณRay Kim
Eshwar Prasad Yaddanapudi

console.log (ข้อมูล typeof); // string ========== var myArray = Array.from (Data); ============ console.log (พิมพ์ myArray); // Object ไม่สนับสนุนคุณสมบัติหรือเมธอด 'จาก' ========== ทำไมถึงเป็นเช่นนั้น
Janatbek Sharsheyev

1
แต่Array.from("0, 1, 233")จะกลับมา["0", ",", " ", "1", ",", " ", "2", "3", "3"]สิ่งที่ถ้าฉันต้องการ[0, 1, 233] ?
Tina Chen

17
นี่เป็นการแปลงอักขระทุกตัวเป็นองค์ประกอบอาร์เรย์ แต่เราต้องการเพียงสตริงคั่นด้วยเครื่องหมายจุลภาคเท่านั้นที่จะเป็นองค์ประกอบอาร์เรย์ ดังนั้นไม่ใช่ทางออกที่ถูกต้อง
Edison D'souza

1
เมธอดนี้เชื่อถือได้เฉพาะเมื่ออาร์กิวเมนต์เป็นSetสตริง
Josh Habdas

57

หากสตริงอยู่ในรูปแบบรายการอยู่แล้วคุณสามารถใช้ JSON.parse:

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

24

แปลงสตริงทุกประเภท

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/

ส่งผลให้คอนโซล

ป้อนคำอธิบายรูปภาพที่นี่

การปฏิบัติบางอย่างไม่สนับสนุนสตริงวัตถุ

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

ฟังก์ชั่นที่ยอดเยี่ยมฉันยังใช้มัน แต่น่าเสียดายที่มันใช้งานไม่ได้กับสตริงหรือสัญลักษณ์: เช่น "0, s" แนวคิดใด ๆ ที่จะแก้ไขได้อย่างไร
sqp_125

1
@ sqp_125 ลอง 0, 's' หรือไม่
Unreality

19

สำหรับสมาชิกอาเรย์แบบง่ายๆคุณสามารถใช้ JSON.parse

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

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

สิ่งนี้ทำให้คุณมีอาร์เรย์ของตัวเลข

ตอนนี้คุณตัวแปรค่าเหมือน array.length = 1

มูลค่าส่งออก

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


16

ตัวเลือกอื่นที่ใช้ ES6 คือการใช้ไวยากรณ์สเปร

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

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


2
! น่ากลัว พร้อมกับ Array.from คำตอบควรเป็นคำตอบเดียวสำหรับโซลูชัน ES6
Artyom Pranovich

10

ใช้ฟังก์ชั่นแผนที่ในตัวกับฟังก์ชั่นที่ไม่ระบุชื่อเช่น:

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

[แก้ไข] นี่เป็นวิธีที่คุณจะใช้

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

1
นี่เป็นคำตอบที่ใช้กันโดยทั่วไปมากที่สุด JSON ไม่สามารถใช้สำหรับตัวคั่นโดยพลการ (เช่นแท็บพื้นที่ ฯลฯ )
javadba

สิ่งนี้จะไม่ทำงานเมื่อค่าอาร์เรย์ของคุณเป็นค่าสตริงที่เป็นไปได้ที่มีเครื่องหมายจุลภาคอยู่ภายใน ตัวอย่างเช่น"123, 'a string with a , comma', 456". คุณสามารถใช้ regex ที่ซับซ้อนมากขึ้นเพื่อจัดการกรณีดังกล่าวได้อย่างถูกต้อง (ตัวอย่างเช่นสิ่งที่แนะนำที่นี่ )
ร่วงโรย

@ จะไม่ดีไม่เป็นไร แต่ใช่คุณสามารถใช้ regex เพื่อแก้ไขปัญหาได้
Dan Mantyla

1
ฉันไม่ได้ตั้งใจที่จะวิพากษ์วิจารณ์คำตอบของคุณ แต่ฉันเขียนสิ่งนี้เพราะฉันใช้วิธีการแก้ปัญหาของคุณและพบปัญหานี้ด้วยตัวเอง คิดว่าจะออกความคิดเห็นให้คนอื่นอาจพบปัญหาที่คล้ายกัน
ร่วงโรย

3

ตัวอย่างเพิ่มเติม "ลองด้วยตัวคุณเอง" ด้านล่าง

นิยามและการใช้งานเมธอด split () ใช้เพื่อแยกสตริงเป็นอาร์เรย์ของสตริงย่อยและส่งคืนอาร์เรย์ใหม่

เคล็ดลับ: หากใช้สตริงว่าง ("") เป็นตัวคั่นสตริงจะถูกแบ่งระหว่างอักขระแต่ละตัว

หมายเหตุ: เมธอด split () จะไม่เปลี่ยนสตริงเดิม

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

3

คุณสามารถใช้ javascript Spread Syntaxเพื่อแปลงสตริงเป็นอาเรย์ ในการแก้ปัญหาด้านล่างฉันลบเครื่องหมายจุลภาคแล้วแปลงสตริงเป็นอาร์เรย์

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

2

วิธีการแปลงสตริงที่คั่นด้วยเครื่องหมายจุลภาคเป็นอาร์เรย์ใน 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"]

สำหรับตัวอย่างเพิ่มเติมของการแปลงสตริงเป็นอาร์เรย์ในจาวาสคริปต์โดยใช้วิธีด้านล่าง:

  1. แยก () - ไม่มีตัวคั่น:
  2. Split () - ตัวคั่นสตริงว่าง:
  3. แยก () - ตัวคั่นที่จุดเริ่มต้น / สิ้นสุด:
  4. ตัวคั่นนิพจน์ปกติ:
  5. การจับภาพวงเล็บ:
  6. แยก () ด้วยข้อ จำกัด ที่ จำกัด

    ตรวจสอบลิงค์นี้ ==> https://www.tutsmake.com/javascript-convert-string-to-array-javascript/



0

แยก (",") สามารถแปลงสตริงด้วยเครื่องหมายจุลภาคเป็นอาร์เรย์สตริงนี่คือข้อมูลโค้ดของฉัน

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

["แอพไฮบริด", "Phone-Gap", "Apache Cordova", "HTML5", "JavaScript", "BootStrap", "JQuery", "CSS3", "Android Wear API"]


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)

// => ประกาศการแสดงออกปกติ

[a-zA-Z0-9] => จับคู่ az, AZ, 0-9 ทั้งหมด

(): => จัดกลุ่มองค์ประกอบที่ตรงกันทั้งหมด

$ 1 => สตริงการแทนที่หมายถึงกลุ่มการจับคู่แรกใน regex

g => ค่าสถานะโกลบอล


0

ตัวอย่างการใช้Array.filter:

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

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

-1

ทำไมคุณไม่แทนที่,คอมมาและsplit('')สตริงเช่นนี้ซึ่งจะส่งผลให้['0', '1']นอกจากนี้คุณสามารถห่อผลในparseInt()การแปลงองค์ประกอบเป็นประเภทจำนวนเต็ม

it('convert string to array', function () {
  expect('0,1'.replace(',', '').split('')).toEqual(['0','1'])
});
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.