カテゴリIDのダウンロード,その2

var downloadAsTextFile = function(fileName, content) {
  var a = document.createElement('a');
  a.download = fileName;
  a.href = (window.URL || window.webkitURL).createObjectURL(new Blob([new Uint8Array([0xEF, 0xBB, 0xBF]), content]));
  document.body.appendChild(a);
  a.click();
  document.body.removeChild(a);
};

var downloadAsCSVFile = function(fileName, rows) {
  var content = "";
  for(var i in rows) {
    for (var j = 0, m = rows[i].length; j < m; ++j) content += '"' + ("" + rows[i][j]).replace(/"/g, '""') + '"' + (j !== m ? ',' : '');
    content += '\n';
  }
  downloadAsTextFile(fileName, content);
};

var large = {}
for(var [k, v] of category_list_minus.find(".l_c_name").toArray().map((e) => [e.id, e.innerHTML])) {
  large[k] = v;
}
for(var [k, v] of category_list_plus.find(".l_c_name").toArray().map((e) => [e.id, e.innerHTML])) {
  large[k] = v;
}
var middle = {};
for(var [pid, id, name] of category_list_minus.find(".m_c_name").toArray().map((e) => [e.parentNode.parentNode.id, e.id, e.innerHTML])) {
  middle[pid] = middle[pid]||{};
  middle[pid][id] = name;
}
for(var [pid, id, name] of category_list_plus.find(".m_c_name").toArray().map((e) => [e.parentNode.parentNode.id, e.id, e.innerHTML])) {
  middle[pid] = middle[pid]||{};
  middle[pid][id] = name;
}
var list = [];
for(var x in middle) { 
  for(var y in middle[x]) {
    list.push([x, large[x], y, middle[x][y]]);
  }
}
downloadAsCSVFile("category_list.csv", list);