Как я могу записать элементы массива в текстовый файл, сохраняя порядок элементов? - PullRequest
0 голосов
/ 04 мая 2019

У меня есть 2 массива (одинаковой длины), и я хотел бы записать содержимое в текстовый файл, сохраняя порядок элементов. Примерно так:

let array1 = [1, 2, 3];
let array2 = [a, b, c];
for (id in array1) {
      fs.appendFile(`./saved_items/output.txt`, 
      `${id}: ${array1[id] + numOfCredits[id]}\r\n`, 
      function (err) {
        if (err) {
          console.log(err);
        }
      });
    }

Таким образом, вывод должен быть таким:

0: 1a
1: 2b
2: 3c

Но вместо этого я получил следующий вывод:

1: 2b
2: 3c
0: 1a

Почему это так и как я могу записать в файл и сохранить порядок элементов?

Ответы [ 3 ]

2 голосов
/ 04 мая 2019

Поскольку appendFile является асинхронной функцией, ваш код может записывать данные в другом порядке, чем вы их вызываете, вы должны использовать цепной вызов этого или использовать синхронизирующую версию функции appendFileSync.

2 голосов
/ 04 мая 2019

Предлагая альтернативу:

Вместо выполнения appendFile в цикле, почему бы сначала не создать данные для записи, а затем выполнить appendFile один раз:

let array1 = [1, 2, 3];
let array2 = [a, b, c];
let data = '';
array1.forEach((el, idx) => {
  data += `${el}: ${el + array2[idx]}\r\n`;
});
fs.appendFile(`./saved_items/output.txt`, data, function (err) {
  if (err) {
    console.log(err);
  }
})
1 голос
/ 04 мая 2019

Вы можете попробовать forEach и не использовать for..in для итерации и массива.Также используйте index для извлечения элемента из второго массива

let array1 = [1, 2, 3];
let array2 = [a, b, c];
arr1.forEach(function(item, index) {
  fs.appendFile(`./saved_items/output.txt`,
    `${index}: ${item + array2[index]}\r\n`,
    function(err) {
      if (err) {
        console.log(err);
      }
    });
})
...