2015-07-21 55 views
0

我試着接受用戶輸入,然後如果它匹配我的csv的一行中的第一個值,將整行推到一個數組。JS如果變量匹配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

我可以看到幾個問題。

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方法,它返回你期望的表單中的數據。在這種情況下,您需要相應地調整比較線。

+0

哦,「城市」在我看來是一個愚蠢的錯誤,但感謝您的建議。 JS只是讓我感到困惑。 d3.csv.parseRows正是我正在尋找的!非常感謝! – SAMO