我尝试接受用户输入,然后如果它匹配我的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]]
任何建议都将不胜感激。
答案 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方法,该方法以您期望的格式返回数据。在这种情况下,您需要相应地调整比较线。