在循环遍历JSON并写入节点中的文件时获取null

时间:2016-06-28 17:41:45

标签: javascript json node.js

我循环浏览2个JSON对象。一个包含国家/地区对象数组,另一个包含机场对象数组。如果该机场的国家与当前国家/地区匹配,我想循环并返回一个结合了两者信息的模型:

const fs = require('fs');
const allData = require('./airports.json');
const countryCodes = require('./codes.json');

const newData = countryCodes.map(country => {
    allData.map(airport => {
        if (country.name === airport.country) {
            // console.logging here shows me that my equality check is working...
            return {
                "airport": `${airport.code} - ${airport.name}`,
                "countryName": `${airport.country}`,
                "countryCode": `${country["alpha-2"]}`
            }
        }
    })
})

fs.writeFile("./newAirlines.json", JSON.stringify(newData, null, 2), function(err) {
    if (err) {
        console.log(err);
    }
});

然而,当我打开它写入的newAirlines.json文件时,我只得到一个null,null,null数组...想知道这是否与异步尝试写入文件之前有关有机会完成循环(?),但我不确定。

任何和所有帮助都很感激。谢谢!

1 个答案:

答案 0 :(得分:1)

你的newData变量没有返回任何内容。您应该在第二次迭代中填充数组,而不是在机场阵列上再次调用map。例如:

    const newAirlines = []
    const newData = countryCodes.forEach(country => {    
      allData.forEach(airport => {
        if (country.name === airport.country) {
          newAirlines.push({
            "airport": `${airport.code} - ${airport.name}`,
            "countryName": `${airport.country}`,
            "countryCode": `${country["alpha-2"]}`
          })
        }
      })
     })

    fs.writeFile("./newAirlines.json", JSON.stringify(newAirlines, null, 2), function(err) {
      if (err) {
        console.log(err);
      }
    })