Quantcast
Channel: 連想配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 129

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

$
0
0

はじめに

サーバー内に、CSVファイルを設置し、それを取得し情報を出力する必要がありました。
その時に、テキストで扱うと大変だったので、連想配列に変換してあげました。

前提

XMLHttpRequest等で、CSVデータを取得できていること。

実装

まず、使用するCSVはこんな感じ

sample.csv
物,メーカー,値段
MacBook,apple,3000
ディスプレイ,iiyama,2500
ヘッドホン,beats,1000

CSVを引数にし、連想配列を返却する関数

sample.js
  /**
   * 引数の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 様からご教示いただいた内容を
冗長かもしれませんが、自分が理解できる形に整理しました。

出力してみる

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

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


Viewing all articles
Browse latest Browse all 129

Trending Articles