はじめに
サーバー内に、CSVファイルを設置し、それを取得し情報を出力する必要がありました。
その時に、テキストで扱うと大変だったので、連想配列に変換してあげました。
前提
CSVデータを取得できていること。
実装
まず、使用するCSVはこんな感じ
物,メーカー,値段 MacBook,apple,3000 ディスプレイ,iiyama,2500 ヘッドホン,beats,1000
連想配列を返却する関数
/** * 引数のCSVデータを連想配列に変換する * @param csv * @returns {{}} */ static convertCsvToArray(csv) { //header:CSV1行目の項目 :csvRows:項目に対する値 const [header, ...csvRows] = csv.split('\n').filter(function (row) { if (row !== '') { return row; } }).map(function (row) { return row.split(','); }); let arrayInKeyAndValue; let resultArray; let tmpResultArray; tmpResultArray = csvRows.map(function (r) { arrayInKeyAndValue = header.map(function (_, index) { //ヘッダーの空白文字を削除。 keyとvalueに値をセット return ({ key: header[index].replace(/\s+/g, ''), value: r[index] }); }); arrayInKeyAndValue = arrayInKeyAndValue.reduce(function (previous, current) { //{key: "物", value: "MacBook", メーカー: "apple", 値段: "3000"}を作成 previous[current.key] = current.value; return previous; }, {}); return arrayInKeyAndValue; }); resultArray = tmpResultArray.reduce(function (previous, current, index) { previous[index] = current; return previous; }, {}); return resultArray; }
@megmism 様からご教示いただいた内容を
冗長かもしれませんが、自分が理解できる形に整理しました。
出力してみる
const csvData=;//取得したCSVデータ const resultArray=convertCsvToArray(csvData); console.log(resultArray) /*出力結果 { 0:{物:"Macbook",メーカー:"apple",値段:"3000"}, 1:{物:"ディスプレイ",メーカー:"iiyama",値段:"2500"}, 2:{物:"ヘッドホン",メーカー:"beats",値段:"1000"}, } */ //使用する時 console.log(resultArray[1]["メーカー"]]) /*出力結果 iiyama */
おわりに
以前、似たような案件があり、その時はJSON形式で扱いやすかったのですが、
CSVだと、ひと手間いるようで、面倒でした。。。
とりあえず、解決したので残しておきます。
間違えているところなどあればご指摘ください。
コメント