Проблемы с вложенным циклом Object.keys forEach и созданием массива объединенных объектов JSON - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть два CSV-файла, один с шагами маршрутизации и один со списком идентификаторов.Мне нужно добавить каждый идентификатор в начале каждого шага маршрутизации.Я использую 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, это в основном работает.Если я сделаю это, я сначала преобразую объект в CSV, и в результате я получу дубликаты заголовков в конце каждой строки.Он записывает намного чище из массива объектов JSON в CSV.

Итак, я пытаюсь собрать все объединенные объекты в массив, чтобы преобразовать их в CSV и записать вфайл.Может кто-нибудь сказать мне, что не так с моим методом?

1 Ответ

0 голосов
/ 22 декабря 2018

Вы должны создать новый объект и назначить ему свойства, например:

var comboObj = Object.assign({}, routeNumArray[key1], routeStepArray[key2]);
...