2016-11-14 53 views
0

我使用d3.json來解碼未知鍵/值的數據集。我需要將數字值轉換爲數字,然後單獨保留。當鍵/值是動態時,將JSON值轉換爲數字

我的JSON是這樣的:

[{"file":"morning","row_total":"1095935","attr1":"79","attr2":""}, 
{"file":"noon","row_total":"221167","attr1":"174","attr2":"114"}, 
{"file":"night","row_total":"1317102","attr1":"253","attr2":"114"}] 

它從d3.json的PHP文件讀入。對於每個可以(不拋出NAN),我需要轉換爲數字(D3使用這個+號)值:

d3.json("getData.php", function(error, data) { 
    if (error) throw error; 

    data.forEach(function(d) { 
     if(!isNaN(d.i = +d.i) 
      d.i = +d.i 
     )}) 

顯然有一個與我的測試/循環邏輯的問題。我非常感謝這裏的一些指導。

謝謝!

回答

1

isNaN將工作在數字字符串 - 賦值運算符很可能拋出你的代碼關閉 - 你可以這樣做:

if(!isNaN(d.i)) { 

你也對你if聲明與isNaN查缺第二)

isNaN("1") //false 
isNaN("x") //true 

假設我應該讀更多。你需要2個循環 - 一個循環你的陣列,另一個測試你的循環對象的每個鍵/ val:

for (var i = 0; i < data.length; i++) { 
    for (var key in data[i]) { 
     if (!isNaN(data[i][key])) { 
      data[i][key] = +data[i][key]; 
     } 
    } 
} 
+0

tymeJV,謝謝你的提示。我還沒有到那裏......數據沒有得到改變。這裏是我改變我的代碼,根據你的建議:data.forEach(function(d){if(!isNaN(d)){d = + d}}); – Phoebe

+0

@Phoebe - 編輯 - 首先誤解您的問題。 – tymeJV

+0

是的!非常感謝!這是一個偉大的模型,我終於可以理解適當的邏輯。非常感激。 – Phoebe

相關問題