【发布时间】:2019-08-03 13:45:29
【问题描述】:
我正在尝试读取文件列表,并根据字符匹配将找到的值推送到对象内的指定数组中。
有一个对象具有三个属性键,每个键都有一个空数组作为值。我需要为两个特定的字符串值解析一个文件列表,每个文件都将两个值之一与对象属性键进行比较,如果匹配,则将第二个值推送到该属性值数组。
我被困在如何根据第一个值的匹配将第二个找到的值与正确的属性键连接起来。该脚本当前将所有第二个值推送到所有三个对象属性数组,而我只想将第二个值推送到与文件中找到的第一个值匹配的数组。
模块
fs
glob
目录结构
+-- _parse-test.js
+-- _scss
| +-- component.scss
| +-- document.scss
| +-- utilities.scss
运行程序
node .\parse-test.js
解析测试.js
var fs = require("fs");
var glob = require("glob");
function runProgram() {
var navObjects = {
'Components': [],
'Document': [],
'Utilities': []
}
const files = glob.sync("scss/*.scss", "matchBase:true");
files.forEach(async (file) => {
try {
const navPairings = {
component: "",
parent: ""
};
let componentName = "";
let navName = "";
const text = fs.readFileSync(file).toString().split("\n");
for (let i = 0; i < text.length; i++) {
if (text[i].includes("/// @group") === true ) {
componentName = text[i].replace("/// @group ", "");
componentName = componentName.replace("\r", "");
}
if (text[i].includes("/// @navGroup") === true ) {
navName = text[i].replace("/// @navGroup ", "");
navName = navName.replace("\r", "");
}
navPairings[i] = {
component: componentName,
parent: navName
}
const pair = navPairings[i];
for (let navGroup of Object.keys(navObjects)) {
if (pair.component !== '') {
if (navObjects.hasOwnProperty(navGroup)) {
navObjects[navGroup].push(pair.component);
}
}
}
}
}
catch(e) {
console.log("Error", e.stack);
console.log("Error", e.name);
console.log("Error", e.message);
}
});
console.log(navObjects);
}
runProgram();
SCSS 文件内容
组件.scss
/// @group nav
/// @navGroup Components
文档.scss
/// @group scroll
/// @navGroup Document
utilities.scss
/// @group colors
/// @navGroup Utilities
当前控制台输出
{ Components: [ 'nav', 'nav', 'scroll', 'scroll', 'colors', 'colors' ],
Document: [ 'nav', 'nav', 'scroll', 'scroll', 'colors', 'colors' ],
Utilities: [ 'nav', 'nav', 'scroll', 'scroll', 'colors', 'colors' ] }
所需的控制台输出
{ Components: [ 'nav', ... ],
Document: [ 'scroll', ... ],
Utilities: [ 'colors', ... ] }
如何将第二个找到的值推送到正确的数组?
【问题讨论】:
标签: javascript arrays string sorting