2012-02-13 21 views
2

我有一个有序排列,看起来像这样: -拆分CSV与使用Javascript/jQuery的对象

[-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 
} 

有谁一个知道如何解析这个CSV使用jQuery的任何生产所需的阵列或纯JavaScript?

+0

哪里是你的研究精力字符串作为自己的价值观? – Christoph 2012-02-13 16:09:27

+0

我已经使用JavaScript“分裂”的功能没有任何成功尝试。到目前为止,我见过的每种方法都使用这个函数。我确定我缺少一些简单的东西,但是string.split(',')导致javscript错误。每次我尝试使用它时,split都不是一个函数。我敢肯定,这仅仅是因为我没有足够好的普通javascript,所以希望有人能指出我正确的方向。 – gordyr 2012-02-13 16:12:53

+0

一些javascript术语:'{}'是一个“对象”或“散列”,它们具有键/值对。 '[]'是一个“数组”,它只是一个有序列表,它们没有键。 – nwellcome 2012-02-13 16:13:42

回答

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. []方括号可用于通过其密钥(像obj['name'])定义一个数组或地址既可以通过索引(如arr[0])的数组元素和对象的属性。
+0

完美...这正是我所需要的,实际上比我想象的要简单得多。非常感谢您提供清晰明确的答案,以及一些很好的个人学习。 :-) – gordyr 2012-02-13 16:46:04

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(); 
} 

来获取值:

要删除键值对:

delete obj[key]; 

希望这有助于。

+0

另一个很好的答案感谢你Indikaf ....不幸的是,nwellcome打了你几分钟,他的解决方案正是我所需要的(就像你偶然的那样)。谢谢你抽出时间回答。 :-) – gordyr 2012-02-13 16:57:44

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])); 
} 

NB - 这也有数字,而不是由于使用parseFloat