嵌套 Object.keys forEach 循环和合并数组 JSON objects 的问题
Problems with nested Object.keys forEach loop and building array of merged JSON objects
我有两个 CSV 文件,一个包含路由步骤,另一个包含 ID 列表。我需要将每个 id 添加到每个路由步骤的开头。我正在使用 Node.js.
var routeNumFile = '/routing_numbers.csv';
var routeStepFile = '/routing_steps.csv';
const csvToJson = require('csvtojson');
const jsonToCsv = require('json2csv').parse;
const fs = require('fs');
var routeNumArray;
var routeStepArray;
try {
routeNumArray = await csvToJson().fromFile(routeNumFile);
} catch (err) {
console.log("error in reading csv file")
}
try {
routeStepArray = await csvToJson().fromFile(routeStepFile);
} catch (err) {
console.log("error in reading csv file")
}
var outputArray = new Array;
var outputPath = '/gitlab/BSI_Create_Csv_Import/finalOutput.csv';
if (routeNumArray != null && routeStepArray != null) {
Object.keys(routeNumArray).forEach(function (key1) {
Object.keys(routeStepArray).forEach(function (key2) {
var comboObj = Object.assign(routeNumArray[key1], routeStepArray[key2]);
console.log(comboObj);
outputArray.push(comboObj);
});
});
}
console.log(outputArray);
var csv = jsonToCsv(outputArray);
fs.writeFileSync(outputPath, csv);
console.log(comboObj) 的输出就是我想要的。但是,当我将其放入数组时,我只是一遍又一遍地获取路由步骤 CSV 中的最后一个条目。如果我直接在创建 comboObj 的地方使用流来编写它,它基本上可以工作。如果我这样做,我会先将 object 转换为 CSV,然后输出会在每一行的末尾留下重复的标题。它从 JSON object 的数组写入 CSV 更清晰。
所以,我试图将所有组合的 object 放在一个数组中,以便我可以将其全部转换为 CSV 并将其写入文件。谁能告诉我我的方法出了什么问题?
您应该创建一个新对象并为其分配 属性,如下所示:
var comboObj = Object.assign({}, routeNumArray[key1], routeStepArray[key2]);
我有两个 CSV 文件,一个包含路由步骤,另一个包含 ID 列表。我需要将每个 id 添加到每个路由步骤的开头。我正在使用 Node.js.
var routeNumFile = '/routing_numbers.csv';
var routeStepFile = '/routing_steps.csv';
const csvToJson = require('csvtojson');
const jsonToCsv = require('json2csv').parse;
const fs = require('fs');
var routeNumArray;
var routeStepArray;
try {
routeNumArray = await csvToJson().fromFile(routeNumFile);
} catch (err) {
console.log("error in reading csv file")
}
try {
routeStepArray = await csvToJson().fromFile(routeStepFile);
} catch (err) {
console.log("error in reading csv file")
}
var outputArray = new Array;
var outputPath = '/gitlab/BSI_Create_Csv_Import/finalOutput.csv';
if (routeNumArray != null && routeStepArray != null) {
Object.keys(routeNumArray).forEach(function (key1) {
Object.keys(routeStepArray).forEach(function (key2) {
var comboObj = Object.assign(routeNumArray[key1], routeStepArray[key2]);
console.log(comboObj);
outputArray.push(comboObj);
});
});
}
console.log(outputArray);
var csv = jsonToCsv(outputArray);
fs.writeFileSync(outputPath, csv);
console.log(comboObj) 的输出就是我想要的。但是,当我将其放入数组时,我只是一遍又一遍地获取路由步骤 CSV 中的最后一个条目。如果我直接在创建 comboObj 的地方使用流来编写它,它基本上可以工作。如果我这样做,我会先将 object 转换为 CSV,然后输出会在每一行的末尾留下重复的标题。它从 JSON object 的数组写入 CSV 更清晰。
所以,我试图将所有组合的 object 放在一个数组中,以便我可以将其全部转换为 CSV 并将其写入文件。谁能告诉我我的方法出了什么问题?
您应该创建一个新对象并为其分配 属性,如下所示:
var comboObj = Object.assign({}, routeNumArray[key1], routeStepArray[key2]);