쉼표로 구분 된 문자열을 배열로 변환하는 방법은 무엇입니까?


720

배열로 변환하려는 쉼표로 구분 된 문자열이 있으므로 반복 할 수 있습니다.

이를 위해 내장 된 것이 있습니까?

예를 들어이 문자열이 있습니다.

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

이제 이것을 쉼표로 나누고 배열에 저장하고 싶습니다.


7
jquery가 필요하지 않다고 말하고 싶었습니다. 이것은 javascript 자체의 일부입니다.
Chris


4
중복과 관련하여 : 참조 된 질문보다 18 개월 앞서 있습니다. 다른 하나는 속임수 일뿐 아니라 정규식 요구 사항으로 인해 매우 간단한 문제에 대한 매우 복잡한 솔루션을 제공합니다
NotMe

40
쉬운. string.split(',');
Braden Best

4
이것이 "너무 현지화 됨"으로 표시되는 이유를 잘 모르겠습니다. 문자열 분할은 등장 을 많이 하고 있다 (내 대답은 여전히 어떻게 든 정기적으로 upvotes를 얻을 수 있다는 사실에 의해 입증) 일반적으로 인터넷의 전세계 관객들에게 적용. 다른 4 명이 와서 다시 열지 않을 것입니다. 기묘한.
Matchu

답변:


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

MDN 참조limit매개 변수의 예기치 않은 동작에 주로 도움이 됩니다. (힌트 :로 "a,b,c".split(",", 2)나오지 ["a", "b"]않습니다 ["a", "b,c"].)


3
JavaScript string가 Java의 풍부함을 가지고 있음을 알면 짧고 달콤 합니다 String.
Michael Shopsin

모든 유형의 문자열을 지원하는 모범 사례. 여기를 참조하십시오 stackoverflow.com/a/32657055/2632619
Andi AR

6
split요소가 있다고 확신하면 제대로 작동 하지만 array서버 / 데이터베이스의 데이터를 예상 ''.split(',')하면 length === 1IE 가 있기 때문에 문제 가 ''.split(',') === ['']
발생할 수 있습니다

@MichaelShopsin과 All, split 함수는 정의되지 않거나 null 참조의 'Split'속성을 가져올 수 없다는 IE11에서 작동하지 않습니다.
DLV

@DLV는 새로운 질문처럼 들릴 것입니다. 아마도 StackOverflow에 이미있는 IE 질문을 확인한 후에 물어보십시오.
Michael Shopsin

130

1,2,3,4,5와 같은 정수를 목표로하는지 확인하십시오. 문자열을 분할 한 후 배열의 요소를 문자열로 사용하지 않고 정수로 사용하려는 경우 이러한 요소로 변환하는 것을 고려하십시오.

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

이런 루프를 추가

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

문자열이 아닌 정수를 포함하는 배열을 반환합니다.


47
parseInt ()는 명시 적으로 설정하지 않으면 밑을 추측하려고 시도하므로 선행 0을 처리 할 때 예기치 않은 결과가 발생할 수 있습니다 ( "001,002,003..."). parseInt('010')와 비교하십시오 parseInt('010', 10).
Álvaro González

3
가능하다면 Alvaro의 의견을 더 많이지지하겠다. 나는 그 교훈을 얼마 동안 배웠고 결코 잊어 버리지 않았습니다.
Antony Scott

2
+1이 예제는 문자열이 정적 개체가 아니라 실제로 문자열 인 변수임을 보여주는 더 분명합니다.
K0D4

5
map함수는 한 줄에서 정수 구문 분석을 수행하는 데 사용할 수 있습니다.str.split(',').map(parseInt)
Jud

1
가장 효율적인 솔루션은 아닙니다. Chrome 49에서의 실험에 따르면 JSON.parse ( '['+ str + ']')는이 솔루션보다 40 % 빠릅니다.
Yao

33

문자열이 항상 쉼표를 포함 할 수 있으므로 흠 나누기는 위험합니다.

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

그래서 어떻게 그럴까요? 그리고 당신은 결과가 무엇을 원하십니까? 다음을 가진 배열

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

쉼표를 이탈하더라도 문제가 발생합니다.

이것을 함께 빠르게 피들 링했습니다.

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

자유롭게 사용 / 편집하십시오 :)


1
이것은 숫자와도 잘 작동하며 아래의 다른 답변에서 언급했듯이 별도의 parseInt 루프를 실행할 필요가 없습니다. 이것은 정말로 깊은 생각입니다. 대단히 감사 드리며 최고의 답변이라고 생각합니다 !!
Anmol Saraf

28

split () 메서드는 문자열을 하위 문자열 배열로 분할하는 데 사용되며 새 배열을 반환합니다.

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

결과는 어떻습니까? 예를 들어 var a = "hello, world, baby"; 그리고 var array = a.split ( ','); -> 내 배열은 다음과 같습니다. array = [ "hello", "world", "baby"]; ??
중추적 인 개발자 :

1
네 맞습니다. 결과 배열은 언급 한대로입니다.
Jakkwylde

귀하의 답변은 저에게 효과적이지만 새로운 배열은 이전 배열을 대체하지 않습니다. 도와주세요? 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

다음 사항에 유의하십시오.

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

경고합니다 1


14

쉼표로 구분 된 문자열을이 함수에 전달하면 배열이 반환되고 쉼표로 구분 된 문자열이 없으면 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
코드 블록 만 게시하는 대신 이 코드로 인해 문제가 해결 된 이유 를 설명 하십시오 . 설명이 없으면 대답이 아닙니다.
Martijn Pieters

1
문자열에 스플릿 값이 포함 될지 확실하지 않은 경우 이것이 가장 올바른 솔루션입니다. 이 함수는 문자열에 쉼표가없는 경우 split 메소드에서 오류가 발생하지 않도록합니다 (위의 예 참조).
CoryDorning

1
참고 : 대문자로 시작하는 함수는 대부분 호출하도록 설계되었습니다. 호출하도록 설계되지 않은 함수에는 소문자를 사용하는 것이 가장 좋습니다.
Jsterman

쉼표없이 값이 하나만있을 때 실패했습니다. 추가 된 else { ResultArray = [CommaSepStr]; }두 번째 후if
토마스 Byy

감사합니다 추가했습니다. 그것.
BJ Patel

8

리턴 기능

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/


3
텍스트 문자열에 오류가 있습니다.-SyntaxError : 예상치 못한 식별자 번호 문자열이 정상입니다. 예. var stringtext = "String, text, I, am"; var stringtextArray = (new Function("return [" + string text + "];")()); 결과 : SyntaxError : 예기치 않은 식별자
nycdanie

7

나는이 질문에 꽤 오랫동안 대답 해 왔지만이 주제를 연구하는 다른 사람들에게 나의 기여가 도움이 될 것이라고 생각했다

다음은 목록에 하나의 항목 만있는 경우에도 구분 기호 문자가없는 문자열을 배열로 변환하는 함수입니다.

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

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

  return fullArray;
}

다음과 같이 사용하십시오.

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

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

split문자열에 구분 문자가 없으면 (하나의 항목 만) 오류가 발생 하기 때문에이 함수를 만들었습니다.


3
분리자를 찾을 수 없으면 오류가 발생하지 않습니다. 'echo'.split(',')returns ['echo'], and ''.split(',') returns ['']. 당신은 것입니다 당신이 호출하면 오류가 발생 x.split(',')하는 경우 x(때를 포함 문자열이 x되어 정의되지 않은 또는 널 (null) 에는이 없기 때문에) split다른 유형에 해당하는 기능.
Joel Lee

아, 실제로 splitlistToArray 함수를 작성할 때 정의되지 않은 객체 를 사용하려고한다는 것을 알았습니다. 지적 해 주셔서 감사합니다 ...
Kabb5

6

비슷한 문제가 있었지만 csv를 배열 배열로 변환해야하기 때문에 더 복잡했습니다 (각 줄은 내부에 항목 배열이 쉼표로 분할 된 하나의 배열 요소입니다).

가장 쉬운 해결책 (그리고 더 안전한 내기)은 PapaParse ( http://papaparse.com/ ) 배열 배열로 변환하는 "헤더 없음"옵션이있는 ) 하는 것입니다. , "를 구분자로 사용합니다.

또한, 그것은 bower에 등록되어 있으므로 다음과 같이해야했습니다.

bower install papa-parse --save

그런 다음 내 코드에서 다음과 같이 사용하십시오.

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

정말 좋아.


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

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

결과는 다음과 같습니다.

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

다음을 다음과 같이 변환하려면

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

이:

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

사용하다:

str = arr.join(',')

3

그 좋은 해결책

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

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

1

쉼표로 구분 된 문자열의 문자열 배열

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

1

다음 스 니펫을 사용해보십시오.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.