【问题标题】:How to import data in csv file into a javascript dictionary?如何将csv文件中的数据导入javascript字典?
【发布时间】:2019-06-17 09:32:37
【问题描述】:

我正在尝试从一个包含四列的 csv 文件用 javascript 创建一个字典。我希望键是 A 列中的内容,值是包含 B:D 列内容的列表。

例如,csv 文件如下所示: A B C D 《face.jpg》《老》《女》《快乐》 "face2.jpg" "老" "男" "快乐"

我希望字典看起来像这样:

faceDict = { face.jpg : ["Old", "Female", "Happy], face2.jpg : ["Old", "Male", "Happy] }

有没有办法在javascript中做到这一点?非常感谢任何帮助,谢谢!

【问题讨论】:

  • 你有没有尝试过什么?
  • 只有文件访问才有可能,因此您不会从客户端 Web 执行此操作。它必须是本地或服务器端。无论如何,你必须展示你已经尝试过的东西。 CSV 文件只是由两个常用分隔符(逗号和换行符)分隔的字符串。
  • 您是否检查过此问题中描述的解决方案? stackoverflow.com/questions/33401523/…
  • @zfrisch 实际上可能是客户端
  • @YaakovAinspan 也许 - 老实说文件 API 是我不太熟悉的东西,但我认为您必须上传或从 fetch 请求中检索。

标签: javascript html csv dictionary


【解决方案1】:

我让它在 Windows 上使用 Chrome 工作(有一些不必要的步骤。)

一个 csv 包含以下内容:

 "1" "b" "c" "d"
 "2" "f" "g" "h"

使用文本编辑器打开文件并将内容粘贴到脚本中,然后用反引号将字符串括起来:

const csv = `1,b,c,d
2,f,g,h`;

这是完整的脚本:

<html>
<script>

const csv = `1,b,c,d
2,f,g,h`;

// Replaces newline characters with commas
const csvModified = csv.replace(/\n/g, ",");

// Converts the string to an array 
const arr = csvModified.split(",");

//Separates the keys and values into their own arrays (assuming every 4th item is a key) 
let keys = [], vals = [];
for(i = 0; i < arr.length; i++){
  if(i % 4 == 0){ keys.push(arr[i]); }
  else { vals.push(arr[i]); }
}

// Makes a javascript object (i.e. a dictionary) from the two arrays
const dict = {};
for(i = 0; i < keys.length; i++){
  localVals = vals.splice(0,3); // Extracts the first three items as a new array
  dict[keys[i]] = localVals; // Adds a property (named for the key) to the object
}

// Prints the object to the browser console
console.log(dict);

</script>
</html>

对象看起来像:

{
  1: ["b", "c", "d"]
  2: ["f", "g", "h"]
}

【讨论】:

  • 您好!谢谢你的回答。看起来它即将开始工作,但是当我在 Chrome 上运行此代码时,我遇到了以下语法错误:未捕获的 SyntaxError:模板字符串中不允许八进制转义序列。
  • 您好!谢谢你的回答。看起来它即将开始工作,但是当我在 Chrome 上运行此代码时,我遇到了以下语法错误:未捕获的 SyntaxError:模板字符串中不允许八进制转义序列。
  • 谢谢。如果您喜欢我的回答,请考虑将其标记为已接受。我从未听说过“八进制转义序列”错误,但这里有一个可能有帮助的参考:mathiasbynens.be/notes/javascript-escapes。我相信“模板模式”是指使用反引号字符来允许多行字符串。如果您可以确定 javascript 将字符串的哪一部分解释为八进制字符,则可以将字符串的该部分存储在变量中,然后将其重新插入到模板中的位置,例如 `normal text ${varHoldingOctalCharacters} more normal text` 祝你好运!
猜你喜欢
  • 1970-01-01
  • 2019-08-06
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多