2016-04-01 38 views
0

這裏是我的代碼:爲什麼不把這個循環寫入每個元素到一個文件?

var data = require('./campSample.json'); 
var dataArray = data.resultset.result; 
var fs = require('fs'); 


for(var i = 0; i < dataArray.length; i++){ 
    fs.writeFile("./campList", dataArray[i]["-facilityName"], function (err) { 
     if(err){ 
      return console.log(err); 
     } 
    }); 
} 

我試圖讓for循環要經過的每個項目在數組中,得到facilityName,並寫入facilityName到一個文件中。當我運行上面的代碼時,它只寫入數組中第一項的facilityName。有一個更好的方法嗎?我正在使用的campSample.json只是一個示例。我想使用的實際數組中有大約4000個項目。這裏是campSample.json的內容:

{ 
    "resultset": { 
    "-count": "4904", 
    "-resultType": "campgrounds", 
    "result": [ 
     { 
     "-availabilityStatus": "N", 
     "-contractID": "GA", 
     "-contractType": "STATE", 
     "-facilityID": "530145", 
     "-facilityName": "A. H. STEPHENS STATE HISTORIC PARK", 
     "-faciltyPhoto": "/webphotos/GA/pid530145/0/80x53.jpg", 
     "-latitude": "33.5633333", 
     "-longitude": "-82.8966667", 
     "-shortName": "C145", 
     "-sitesWithAmps": "Y", 
     "-sitesWithPetsAllowed": "Y", 
     "-sitesWithSewerHookup": "N", 
     "-sitesWithWaterHookup": "Y", 
     "-state": "GA" 
     }, 
     { 
     "-availabilityStatus": "N", 
     "-contractID": "OH", 
     "-contractType": "STATE", 
     "-facilityID": "960023", 
     "-facilityName": "A.W. MARION STATE PARK", 
     "-faciltyPhoto": "/webphotos/OH/pid960023/0/80x53.jpg", 
     "-latitude": "39.6336111", 
     "-longitude": "-82.8747222", 
     "-shortName": "P023", 
     "-sitesWithAmps": "Y", 
     "-sitesWithPetsAllowed": "Y", 
     "-sitesWithSewerHookup": "N", 
     "-sitesWithWaterHookup": "N", 
     "-state": "OH" 
     }, 
     { 
     "-availabilityStatus": "N", 
     "-contractID": "NRSO", 
     "-contractType": "FEDERAL", 
     "-facilityID": "72346", 
     "-facilityName": "ACKER ROCK LOOKOUT", 
     "-faciltyPhoto": "/webphotos/NRSO/pid72346/0/80x53.jpg", 
     "-latitude": "43.0523056", 
     "-longitude": "-122.6456111", 
     "-shortName": "ARCL", 
     "-sitesWithAmps": "N", 
     "-sitesWithPetsAllowed": "Y", 
     "-sitesWithSewerHookup": "N", 
     "-sitesWithWaterHookup": "N", 
     "-state": "OR" 
     } 
    ] 
    } 
} 
+0

您能告訴我們在這個文件'「./campList」'中的預期結果嗎? – Lewis

+0

如何連接'string'和'fs.writeFile'只有一次? – Rayon

+0

對於上面的json樣本,預期的輸出如下: A.H.史蒂文斯州歷史公園 A.W.馬里昂州立公園 ACKER ROCK LOOKOUTTE歷史公園 但現在我看到了訂單,當前代碼實際上只是寫入第三個項目的facilityName,Acker Rock ... – Impulso

回答

0

從你的評論,你需要的內容附加到文件,所以下面的代碼將工作

var data = require('./campSample.json'); 
var dataArray = data.resultset.result; 
var fs = require('fs'); 

for(var i = 0; i < dataArray.length; i++){ 
    fs.appendFile("./campList", dataArray[i]["-facilityName"]+'\r\n', function (err) { 
     if(err){ 
      return console.log(err); 
     } 
    }); 
} 
+0

啊哈!這對我有效。非常感謝您的幫助。 for循環現在將facilityNames以列表格式寫入一個新文件。謝謝! – Impulso

1

writeFile文檔:

注意,它是不安全的在同一個文件中使用fs.writeFile多次,而無需等待回調。對於這種情況,fs.createWriteStream強烈建議

此外:

異步數據寫入一個文件,替換該文件,如果它已經存在。

+0

createWriteStream提供了一個錯誤,未知的編碼:a。 H。斯蒂芬州立歷史公園 – Impulso

2

你應該事先收集所有的名字,然後寫所有名稱爲./campList只是一個單一的IO請求。

var names = dataArray.map(function(result) { 
    return result["-facilityName"]; 
}).join('\n'); 
fs.writeFile("./campList", names, function(err) { 
    if (err) { 
    return console.log(err); 
    } 
}); 
+0

由於多種原因,這似乎是一種比追加和迭代更好的方法。 –

+0

完全同意+1 – JagsSparrow

相關問題