我已经学习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...
这是我正在使用的代码:
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...
这个解决方案在任何方面都不给我留下优雅的印象。我特别关注从文本文件转换键/值对的更简单方法,但如果您有东西要分享,我当然会接受对楼梯练习的整个行动计划的任何批评。
我已经搜索了我能想到的所有标准组合来找到答案,但键/值对似乎总是需要标题。我可能没有使用正确的术语。
请原谅我刚刚使用的术语,如果我遗漏了一些重要的内容,请索取更多信息。谢谢!
如果您能够使用异步内容:(将逐行阅读)
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);