実際のコード
/*
# CSVを配列に変換する関数
*/
const csvToArray = (str) => {
return _.reduce(String.prototype.split.call(str, '\n'), (table, row) => {
if (!!row) { // 空白行を除外するため、行(row)がある場合だけ処理.
table.push(_.map(row.split(','), (col) => { // 行(row)をカンマ毎に分解した配列をテーブル(table)にpush().
return col.trim(); // 列(col)をトリムして返す.
}));
}
return table;
}, []);
};
実行結果
const csv = 'title,desc\nタイトル1,デスク1\nタイトル2,デスク2';
const table = csvToArray(csv);
/*
# 結果
# [
# ['title', 'desc'],
# ['タイトル1', 'デスク1'],
# ['タイトル2', 'デスク2']
# ]
*/
解説
- 引数strを改行毎に分解(split)した配列を、_.reduce関数の第一引数に渡す。
- .reduce関数は、第三引数(この場合は[])で初期化された変数(table)を、.reduce関数の第二引数に渡す関数(以降f()と呼ぶ)の第一引数(table)に設定し、第一引数に渡された配列の長さ分、f()を繰り返す。
- その際、f()の処理毎に、f()に返された戻り値を次のf()実行時に、自身の第一引数(table)に渡すため、table変数には前回のf()の戻り値が貯蓄されていくため、tableを戻り値として_.reduce関数に返す。
- 処理を終えた、_.reduce関数(tableの値)を戻り値として返す。
まとめ
Underscore.js便利!
Qiitaにあった、Underscore.jsの配列系メソッドのまとめページはこちら → 遅すぎたUnderscore.js詳述 – Arrays編 – Qiita
おわり〜(チャンチャンっ♪)