为什么不是't用于将每个元素写入文件的循环

Why isn't this for loop writing each element to a file?

本文关键字:元素 文件 循环 用于 为什么不      更新时间:2023-11-08

这是我的代码:

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。有更好的方法吗?我正在使用的campSample.json只是一个示例。我想使用的实际数组中有大约4000个项目

{
  "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"
      }
    ]
  }
}

您应该事先收集所有名称,然后只需一个IO请求就可以将所有名称写入./campList

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

来自writeFile文档:

请注意,在同一文件上多次使用fs.writeFile而不等待回调是不安全的。对于这种情况,强烈建议使用fs.createWriteStream

另外:

将数据异步写入文件,如果文件已存在,则替换该文件。

根据您的注释,您需要将内容附加到文件中,因此以下代码将在中工作

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);
        }
    });
}