javascript - 不使用库从 csv 文件中的文本数据创建 javascript 对象的步骤

标签 javascript csv javascript-objects

我需要将数据从 csv 文件转换为 JavaScript 对象,其中每个对象的键是数据中的 ID。每个用户一个 JS 对象。

问题:有没有办法使用 vanilla JS 解决它?

我至少需要大致了解一下该怎么做,因为我所能找到的只是使用 jQuery 或 JSON 解决此问题的方法,但对于我试图了解的研究,我无法找到使用专门的库,我只能使用普通的 VanillaJS。

示例文本数据:

id  first_name    last_name    email                gender
--  ----------    ---------    -----                ------
1   Gloria        Mendez       gmendez@ipu.gov      Female
2   Lucy          Grey         lgrey@gmail.com      Female
3   Max           Mcolom       mmcolom@yahoo.com    Male
4   David         Cooke        dcooke@gmail.com     Male
5   Marwin        Darge        mdarge@gov.com       Male

hundreds of other rows

期望的输出:

{
  1: { 
    id: 1, first_name: 'Gloria', last_name: 'Mendez', email: 'gmendez@ipu.gov', gender: 'female'
  },
  2: {
    id: 1, first_name: 'Lucy', last_name: 'Grey', email: 'lgrey@gmail.com', gender: 'female'
  },
  ...
}

最佳答案

在下面使用 vanilla JS。

我添加了注释来解释代码的作用。它基本上是将数据分成行,然后是单元格,并在此过程中进行数组操作:

let table =
`id  first_name    last_name    email                gender
--  ----------    ---------    -----                ------
1   Gloria        Mendez       gmendez@ipu.gov      Female
2   Lucy          Grey         lgrey@gmail.com      Female
3   Max           Mcolom       mmcolom@yahoo.com    Male
4   David         Cooke        dcooke@gmail.com     Male
5   Marwin        Darge        mdarge@gov.com       Male`

// Split into rows, and then split each row into cells
let rows = table.split(/[\r\n]+/g).map(row => row.trim().split(/[\s\t]+/g));
// The first row will be the header
let header = rows[0];
// The rest is the data
let data = rows.slice(2);


// Create a function to return the desired object structure
function formatObject(headers, cells) {
  return headers.reduce((result, header, idx) => {
    result[header] = cells[idx];
    return result;
  }, {});
}

// Reduce each row into the desired format, and use the ID as a key
let result = data.reduce((res, row, idx) => {
  let value = formatObject(header, row);
  res[value.id] = value;
  return res;
}, {});

// Log the result
console.log(result);

关于javascript - 不使用库从 csv 文件中的文本数据创建 javascript 对象的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48015270/

相关文章:

Python 在迭代处理我的 1GB csv 文件时停止

python - 将 CSV 文件与 Python 组合,不包含重复元素

javascript - 循环对象数组中的属性的最有效方法是什么?

javascript - 随机播放对象对象或在模板中的 Angular 2 中随机显示元素

javascript - 使用 JavaScript 检查一个目标 webgrid 中的所有框

Javascript 数组 - 如何选择一个随机的十六进制值?

javascript - 如何使用 Greasemonkey 单击 <li> 项?

javascript - 没有办法删除谷歌地方自动完成?

sql-server - 将字段中带有换行符的 CSV 批量插入到 SQL Server 中

javascript - 理解 JavaScript 中的原型(prototype)或 Map.prototype