Javascript node js自动从文件夹中的文本文件中提取数据

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 交叉 巡洋舰

我是新来的。例如,我需要将数据从文本文件拉入对象数组。我有文件夹/摩托车,其中包含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文件
我希望,我的应用程序能够自动将文本文件中的数据拉入对象数组。谢谢您的帮助。

有一件事会有所帮助,那就是使用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))