使用javascript / jquery将CSV拆分为对象

时间:2012-02-13 16:03:37

标签: javascript jquery arrays parsing csv

我有一个有序数组,如下所示: -

[-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50]

我想做的是以下内容:

  • 取每个'奇数'条目并使其成为对象中的'关键索引,这可以通过舍入该值并乘以10来实现,例如(Math.round(-0.0020057306590257895 * 10)应为索引0,Math.round(0.09598853868194843 * 10)应为索引1等。
  • 取“偶数”值并使它们成为对象中的相应值。

因此...

上述CSV文件应返回以下对象: -

{
  0: 50,
  1: 50,
  2: 49.99999999999999,
  3: 50
}

有没有人知道如何使用jQuery或普通javascript解析此CSV以生成所需的数组?

3 个答案:

答案 0 :(得分:4)

我将假设您已经完成了将CSV文件读入字符串的操作,因为您在使用.split(",")尝试的评论中说过。

var csv = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50";
var arr = csv.split(",");
var obj = {};
for (var i = 0; i < arr.length - 1; i += 2) {
    obj[Math.round(arr[i] * 10)] = arr[i + 1];
}

你应该首先检查数组中是否有偶数个元素,例如if (arr.length % 2 == 0)

你应该带走的东西是:

  1. {}花括号用于定义对象,一对空括号与new Object()的含义相同,但建议使用括号。
  2. []方括号可用于定义数组或通过索引(如arr[0])和对象的属性(如obj['name'])来处理数组的元素。 })。

答案 1 :(得分:1)

var arr = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50".split(",");
var obj = {};

for (index = 0; index < arr.length - 1; index += 2) {
    var key = Math.round(parseFloat(arr[index]) * 10);
    var value = Math.round(parseFloat(arr[index + 1]) * 10);
    obj[key.toString()] = value.toString();
}

获取值:

var keyVal = obj[key];

删除键值对:

delete obj[key];

希望这有帮助。

答案 2 :(得分:1)

如果您的数据结构保证每个整数都有一个值(即在偶数列中不会从3.9直​​接跳到5.9),您可以节省一些精力并使用

var arr = "-0.0020057306590257895, 50, 0.09598853868194843, 50, 0.19398280802292264, 49.99999999999999, 0.2919770773638969, 50".split(",");
var result = [];

for (index = 0; index < arr.length - 1; index += 2) {
    result.push(parseFloat(arr[index + 1]));
}

注意 - 由于使用了parseFloat

,这也是数字而不是字符串