javascript - 如何在 Javascript 中解析 CSV

标签 javascript jquery arrays algorithm csv

(第一次发帖,如有错误请见谅)

我正在处理 CSV 文件中的一小组数据,我需要读取、处理这些数据,然后将其导出为文本文件。

CSV 数据格式为:

REGO,STATUS,SHIFT,LOCATION,LOADED
CCA4110,StatusON,5:43,Brisbane,1
CCA4112,StatusON,5:44,Syndey,0
CCA4118,StatusON,6:11,Melbourne,1

我希望能够在标题行之后获取每一行,并检查

a) 如果“加载”值等于 0 或 1(如果为 1 则跳至下一行)。

b) 如果“LOADED”为 0,则检查“REGO”值是否与预定义的“REGO”值列表匹配。

c) 如果匹配,则更改“SHIFT”时间。

d) 如果没有匹配,则移至下一行。

之后,我想导出所有行,只有“REGO”和“SHIFT”值,如下所示:

CCA4110,5:43
CCA4112,5:33
...

因为这对我来说有点复杂,所以我无法想象解决这个问题的最佳方法。我想知道是否有人可以帮助我以一种不仅仅是将一打嵌套 for 循环拼凑在一起的方式来思考这个问题。

非常感谢,

利亚姆

编辑:关于检查多个条件的问题:

假设我有两个 CSV 文件:

List_to_Change.csv

REGO,STATUS,SHIFT,LOCATION,LOADED       
CCA2420,StatusOn,11:24,BRISBANE,1
CCA2744,StatusOn,4:00,SYDNEY,1
CCA2009,StatusOn,4:00,MELBOURNE,0

List_to_Compare.csv

REGO,CORRECT_SHIFT
CCA2420,6:00
CCA2660,6:00
CCA2009,5:30

一个算法:

1.检查“List_to_Check.csv”“已加载”列中的值

一个。如果值等于“0”,则转到第 2 步。

B.如果值等于“1”,则跳过此行并转到下一行。

2. 检查“List_to_Check.csv”中的“REGO”值是否出现在“List_to_Compare.csv”中

一个。如果为真,转到第 3 步。

B.如果 false 跳过此行并转到下一个。

3. 将“List_to_Change.csv”中的“SHIFT”值更改为“List_to_Compare.csv”中显示的值

4. 将更改的每一行字符串化并导出到文本文件。

最佳答案

我的建议是将工作流程分为三个步骤:

  1. 将所有行解析为 javascript 对象
  2. 对对象数组执行逻辑
  3. 将对象字符串化回 CSV

// This creates an object based on an order of columns:
const Entry = ([rego, status, shift, location, loaded]) =>
  ({ rego, status, shift, location, loaded });
  
// Which entries are we interested in?
const shouldHandleEntry = ({ loaded }) => loaded === "1";

// How do we update those entries?
const updateEntry = entry => ({
  ...entry,
  shift: ["CCA4118"].includes(entry.rego)
    ? "5:33"
    : entry.shift
});

// What do we export?
const exportEntry = ({ rego, shift }) => `${rego},${shift}`;

// Chain the steps to create a new table:
console.log(
  csvBody(getCSV())
    .map(Entry)
    .filter(shouldHandleEntry)
    .map(updateEntry)
    .map(exportEntry)
    .join("\n")
)


// (This needs work if you're using it for production code)
function csvBody(csvString) {
  return csvString
    .split("\n")
    .map(line => line.trim().split(","))
    .slice(1);
};

function getCSV() { return `REGO,STATUS,SHIFT,LOCATION,LOADED
CCA4110,StatusON,5:43,Brisbane,1
CCA4112,StatusON,5:44,Sydney,0
CCA4118,StatusON,6:11,Melbourne,1`; }

关于javascript - 如何在 Javascript 中解析 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52815647/

相关文章:

javascript - 自定义 jQuery Accordion

python - arr[ :] in assignment in numpy? 是什么意思

javascript - CKEDITOR - 启用插入 Java 脚本代码

javascript - 在文本框事件中传递的javascript函数中传递标签的id

php - 为什么框架和此类弃用函数而不是仅仅更新它们?

javascript - 如何从段落中检索值

arrays - postgresql数组类型是否保留数组的顺序?

java - 从 Java 中不断变化的 URL 解析 JSON 数组

javascript - 无法在 JSF 中用 JavaScript 替换 div 内容

php - 当图像不存在时使用哪种方法