분류 javascript

Javascript 30초 Snippet - String : CSVToJSON

컨텐츠 정보

  • 조회 293 (작성일 )

본문

CSV (쉼표로 구분 된 값) 문자열을 2D 객체 배열로 변환합니다. 문자열의 첫 번째 행이 제목 행으로 사용됩니다.


https://github.com/30-seconds/30-seconds-of-code#bytesize 


첫 번째 행 (제목 행)을 값으로 분리하려면 Array.prototype.slice() 및 Array.prototype.indexOf('\n') 및 String.prototype.split(delimiter)를 사용하십시오. 

String.prototype.split('\n')을 사용하여 각 행에 대한 문자열을 만든 다음 Array.prototype.map() 및 String.prototype.split(delimiter)를 사용하여 각 행의 값을 구분하십시오. 

Array.prototype.reduce()를 사용하여 제목 행에서 키를 구문 분석하여 각 행의 값에 대한 객체를 만듭니다. 기본 분리 문자 인을 사용하려면 두 번째 인수 인 분리 문자를 생략하십시오.


const CSVToJSON = (data, delimiter = ',') => {
  const titles = data.slice(0, data.indexOf('\n')).split(delimiter);
  return data
    .slice(data.indexOf('\n') + 1)
    .split('\n')
    .map(v => {
      const values = v.split(delimiter);
      return titles.reduce((obj, title, index) => ((obj[title] = values[index]), obj), {});
    });
};


ex)


CSVToJSON('col1,col2\na,b\nc,d'); // [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];
CSVToJSON('col1;col2\na;b\nc;d', ';'); // [{'col1': 'a', 'col2': 'b'}, {'col1': 'c', 'col2': 'd'}];