将 2 列文本文件转换为键/值对、JS、NodeJS、Express

问题描述 投票:0回答:1

我已经学习Javascript大约一年了,目前正在学习nodeJS和Express。我正在尝试解决一个测试问题,其中涉及将文本文件转换为键值对。

提供的文本文件如下所示(有 300 行):

提供文本文件

我想要一个创建数组或 JSON 的转换,或多或少看起来像这样:

{283: 'land'}
{45: 'sun'}
{149: 'too'}
{258: 'huge'}
{161: 'dont'}`

第一列项目成为键,第二列项目成为值。 这个结果将成为一个常量,我可以在其中调用数字(键)并获取单词(值)。

我已成功转换为 JSON,标题位于列顶部,然后删除所有不需要的信息,只得到数字和单词。

我必须编辑文本文件以制作完美间隔的列并添加标题:

json_num        json_word
283             land
45              sun
149             too
258             huge
161             dont...

这是我正在使用的代码:

来自 VScode 的代码

const express = require("express");
const dataToJson = require("data-to-json");

const app = express();
const port = "3000";

const dataInJSON = dataToJson.txt({ filePath: "./coding_qual_input.txt" }).toJson();

console.log(dataInJSON)
const dataLength = dataInJSON.length;
        
function create_staircase(nums) {
    var subsets = [];
    var step = 1;
    while (nums.length !== 0) {  
      if (step === subsets.length+1) {
        subsets = nums.slice(0, step);
        const value = (dataInJSON.find((dataInJSON) => dataInJSON.json_num == (subsets[step-1])));
        console.log(value.json_num, value.json_word);
        nums.splice(0, step);
        step++;
    } else {
        subsets = nums.splice(0, subsets.length+1);
        nums.splice(0, step);
        step++;
      }
      }  
    } 

    const arrayRange = (start, stop, step) =>
    Array.from(
    { length: (stop - start) / step + 1 },
    (value, index) => start + index * step
    );
  create_staircase(arrayRange(1, dataLength, 1));
  
  app.listen(port, () => {
    console.log(`Battleship ${port} Cats listening, over!`);
});

结果大致是这样的:

1 design
3 all
6 skill
10 whole
15 check
21 deal
28 wish
36 visit...

这个解决方案在任何方面都不给我留下优雅的印象。我特别关注从文本文件转换键/值对的更简单方法,但如果您有东西要分享,我当然会接受对楼梯练习的整个行动计划的任何批评。

我已经搜索了我能想到的所有标准组合来找到答案,但键/值对似乎总是需要标题。我可能没有使用正确的术语。

请原谅我刚刚使用的术语,如果我遗漏了一些重要的内容,请索取更多信息。谢谢!

javascript node.js arrays json npm
1个回答
0
投票

如果您能够使用异步内容:(将逐行阅读)

var lineReader = require('line-reader');

const json = {};

lineReader.eachLine('file.txt', function (line, last) {
    const keyValue = line.split(' ');
    json[keyValue[0]] = keyValue[1];

    if (last) {
        console.log(json);
    }
});

否则:(将整个文件加载到内存中)

const fs = require('fs');

const json = {}
fs.readFileSync('open_ai_calls_payload.json', 'utf-8').split(/\r?\n/).forEach(function (line) {
    if (!line) return;
    const keyValue = line.split(' ');
    json[keyValue[0]] = keyValue[1];
})

console.log(json);
© www.soinside.com 2019 - 2024. All rights reserved.