我正在使用“节点文件系统”模块解析和格式化文本文件,然后将其输出到新格式化的文本文件中。如何在保留格式的同时在文本文件的第一行添加{并在文本文件的最后一行添加}?
我尝试使用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不是函数”。
答案 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 = '{';