🎃

JavaScript 取得したCSVを連想配列に変換する

2019/04/09に公開

はじめに

サーバー内に、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だと、ひと手間いるようで、面倒でした。。。 とりあえず、解決したので残しておきます。

間違えているところなどあればご指摘ください。

GitHubで編集を提案

Discussion