// make-object.js
class HeaderListData {
constructor(source, sepatator = ',') {
const rowData = source.split('\\n');
this.header = rowData[0].split(sepatator);
this.rows = rowData
.filter((row, index) => index > 0)
.map(row => row.split(sepatator));
}
row = (index) => this.rows[index]
.map((row, index) => [this.header[index], row]);
get length() {
return this.rows.length;
}
get columnLength() {
return this.headers.length;
}
}
export default class MakeObject extends HeaderListData {
toObject = index => this
.row(index)
.reduce((a, [key, value]) => ({ ...a, [key]: value }), {});
toAllObject = () =>
Array(this.length)
.fill(0)
.map((item, index) => this.toObject(index));
}
// app.js
import MakeObject from './make-object.js';
const movieData = `Title,Release,Ticketing Rate, Director
보헤미안 랩소디,2018.10.31,11.5%,브라이언 싱어
완벽한 타인,2018.10.31,4.6%,이재규
동네사람들,2018.11.07,0.5%,임진순`;
const movieList = new MakeObject(movieData);
console.log(movieList.toAllObject());
// [출력 결과]
// [
// {
// Title: '보헤미안 랩소디',
// Release: '2018.10.31',
// 'Ticketing Rate': '11.5%',
// ' Director': '브라이언 싱어'
// },
// {
// Title: '완벽한 타인',
// Release: '2018.10.31',
// 'Ticketing Rate': '4.6%',
// ' Director': '이재규'
// },
// {
// Title: '동네사람들',
// Release: '2018.11.07',
// 'Ticketing Rate': '0.5%',
// ' Director': '임진순'
// }
// ]