JS如果变量匹配csv值push to array

时间:2015-07-21 00:18:51

标签: javascript arrays csv

我尝试接受用户输入,然后如果它匹配我的csv行中的第一个值,则将整行输入数组。

我有一个看起来像这样的csv。

City,Lat,Lon,Date
Seattle,47.6,122.3,2015 06 03
Spokane, 47.65, 117.42,2015 06 04

我接受这样的用户输入。

var city = window.prompt("Which city are looking for",);
console.log(city);

然后,如果用户输入的城市与csv中的城市匹配,我想将其推送到新阵列。这是我为它写的代码,但它不太有用。

d3.csv("./some.csv", function(data) {
var lst = [];

for (var i = 0; i < data.length; i++){
if (data.City[i] == 'city') {
lst.push(data[i]);
}
console.log(lst);
}
});

我想要的输出看起来像这样。

[['Seattle',47.6,122.3,2015 06 03],
 ['Seattle',47.6,122.3,2015 06 05]]

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我可以看到几个问题。

if (data.City[i] == 'city') {

data是一个数组,其每个条目都是一个对象,其属性与列标题具有相同的名称。因此,而不是data.City[i],而不是data[i].City

您还要将结果与字符串文字'city'进行比较,而不是将变量city进行比较。

最后you should probably use ===以避免混淆结果。

所以这一行应该是:

if (data[i].City === city) {

另一件事是D3返回的数据结构与您的预期不符。而不是:

[['Seattle',47.6,122.3,2015 06 03]]

你会得到

[ { City: 'Seattle', Lat: 47.6, Lon: 122.3, Date: '2015 06 03' } ]

如果您遇到问题,可以考虑使用d3.csv.parseRows方法,该方法以您期望的格式返回数据。在这种情况下,您需要相应地调整比较线。