実際のコード


/*
 # 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']
# ]
*/

解説

  1. 引数strを改行毎に分解(split)した配列を、_.reduce関数の第一引数に渡す。
  2. .reduce関数は、第三引数(この場合は[])で初期化された変数(table)を、.reduce関数の第二引数に渡す関数(以降f()と呼ぶ)の第一引数(table)に設定し、第一引数に渡された配列の長さ分、f()を繰り返す。
  3. その際、f()の処理毎に、f()に返された戻り値を次のf()実行時に、自身の第一引数(table)に渡すため、table変数には前回のf()の戻り値が貯蓄されていくため、tableを戻り値として_.reduce関数に返す。
  4. 処理を終えた、_.reduce関数(tableの値)を戻り値として返す。

まとめ

Underscore.js便利!

Qiitaにあった、Underscore.jsの配列系メソッドのまとめページはこちら → 遅すぎたUnderscore.js詳述 – Arrays編 – Qiita

おわり〜(チャンチャンっ♪)

この記事を書いた人

こうへい

Web developer && 映像クリエイター.