使用Node JS在文本文件的第一行和最后一行添加大括号吗?

时间:2019-04-05 21:44:40

标签: javascript node.js fs

我正在使用“节点文件系统”模块解析和格式化文本文件,然后将其输出到新格式化的文本文件中。如何在保留格式的同时在文本文件的第一行添加{并在文本文件的最后一行添加}?

我尝试使用array.unshift(“ {\ n”);和array.push(“}”);在文件中添加大括号,但控制台将抛出“ array.unshift不是函数”。

const fs = require('fs');

const array = fs.readFileSync('input.txt').toString().split("\n");

let result = '';

for(let i = 0; i < array.length; ++i){
    result += ( "\t\"" + (i + 1) + "\" : [ \"" + array[i] + "\" ], \n");
};

result.unshift("{\n");
result.push("}");

fs.writeFile("output.txt", result, function(err, data) {
  if (err) console.log(err);
  console.log("Successfully Written to File.");
});

我希望output.text读取:

{
    "1" : [ "car" ],
    "2" : [ "train"],
}

但是实际输出是“ result.unshift不是函数”。

2 个答案:

答案 0 :(得分:1)

Instead of what you are doing manually trying to create json (which is error prone), create an actual object using a simple Array#reduce() then JSON.stringify() that whole object to write to file

const array = fs.readFileSync('input.txt').toString().split("\n");

const res = array.reduce((a, c, i) => (a[i]=[c], a), {});

const jsonString = JSON.stringify( res, null, '\t');

fs.writeFile("output.txt", jsonString  , function(err, data) {
  if (err) console.log(err);
  console.log("Successfully Written to File.");
});

答案 1 :(得分:0)

因为result不是数组,所以是字符串。字符串既没有.unshift也没有.push方法。要在开头添加字符,请执行以下操作:

 result = "{" + result;

...但是为什么不在循环之前将result设置为

let result = '{';