Javascript node js自动从文件夹中的文本文件中提取数据
我是新来的。例如,我需要将数据从文本文件拉入对象数组。我有文件夹/摩托车,其中包含4个子文件夹:运动,交叉,巡洋舰,直升机 每个文件夹包含3个子文件夹:新的、旧的、重新制造的 每个文件夹包含3个文本文件:1.txt、2.txt、3.txt,它们是摩托车的评级,每个文件包含摩托车本田、雅马哈等的名称和价格1000、1500、3000等 摩托车 运动 刚出现的 1.txt 2.txt 3.txt 习惯于 1.txt 2.txt 3.txt 重新制造 1.txt 2.txt 3.txt 交叉 巡洋舰 斩波器 示例txt文件Javascript node js自动从文件夹中的文本文件中提取数据,javascript,arrays,node.js,file,directory,Javascript,Arrays,Node.js,File,Directory,我是新来的。例如,我需要将数据从文本文件拉入对象数组。我有文件夹/摩托车,其中包含4个子文件夹:运动,交叉,巡洋舰,直升机 每个文件夹包含3个子文件夹:新的、旧的、重新制造的 每个文件夹包含3个文本文件:1.txt、2.txt、3.txt,它们是摩托车的评级,每个文件包含摩托车本田、雅马哈等的名称和价格1000、1500、3000等 摩托车 运动 刚出现的 1.txt 2.txt 3.txt 习惯于 1.txt 2.txt 3.txt 重新制造 1.txt 2.txt 3.txt 交叉 巡洋舰
我希望,我的应用程序能够自动将文本文件中的数据拉入对象数组。谢谢您的帮助。有一件事会有所帮助,那就是使用JSON文件而不是TXT文件。Javascript提供了从JSON轻松提取数据的方法
这里有一种方法可以将文件中的数据作为数组中的对象来获取。我提供了一个最终结果的示例对象和一些您可能会弄乱的示例代码 样本对象 示例代码
这是一个问答网站,不是一个让你完全完成工作的地方,你应该先自己尝试一下,然后问一些问题needed@ysytnik您可以添加一个.txt文件内容的示例吗like@JonathanPortorreal本田:3400雅马哈:3000川崎:2800铃木:2750@ysytnik更新了代码这样,您就可以在readMotoBike中以回调的形式获取对象数组
Honda:3400
Yamaha:3000
Kawasaki:2800
Suzuki:2750
[{
bike: 'Chopper',
type: 'New',
data: {
Honda: 3400,
Yamaha: 3000,
Kawasaki: 2800,
Suzuki: 2750
}
}]
const fs = require('fs');
const path = require('path');
const bikePaths = ["Chopper", "Cross", "Cruiser", "Sports"];
const bikeTypes = ["New", "Re-manufactured", "Used"];
function getFileAsObject(file, result) {
let typeDir = path.dirname(file);
let bikeDir = path.dirname(typeDir);
return new Promise((resolve, reject) => {
fs.readFile(file, 'utf8', (err, data) => {
if (err)
reject(err);
let lines = data.split('\n').filter(line => line != '');
let obj = lines.reduce((acc, line) => {
let [key, value] = line.split(':');
Object.assign(acc, {
[key]: value
})
return acc;
}, {});
resolve({
bike: path.basename(bikeDir),
type: path.basename(typeDir),
data: obj
})
})
});
}
function readMotoBike(bikepaths, biketypes, result) {
const flatten = arr => arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);
let allPaths = bikepaths.map(bike => biketypes.map(type => {
let currpath = bike + "/" + type;
let pathToFile = path.format({
root: './MotoBike/',
base: currpath
});
let allFiles = fs.readdirSync(pathToFile);
return allFiles.map(file => pathToFile + "/" + file);
}));
allPaths = flatten(allPaths);
Promise.all(
allPaths.map(file => {
return getFileAsObject(file).then(res => {
return res;
});
})
).then(result)
}
readMotoBike(bikePaths, bikeTypes, result => console.log(result))