javascript - 精确字符串匹配文件名数组 JavaScript/Nodejs

标签 javascript arrays node.js search matching

我目前有一个在 forEach 循环中使用的 findFile 函数来迭代文件名数组,然后为原始数组中的每个文件名提供一个新的文件系统路径数组:

var dir = 'Some File System Path';
const fs = require('fs');

const findFile = function (dir, pattern) {
    var results = [];
    fs.readdirSync(dir).forEach(function (dirInner) {
        dirInner = path.resolve(dir, dirInner);
        var stat = fs.statSync(dirInner);
        if (stat.isDirectory()) {
            results = results.concat(findFile(dirInner, pattern));
        }
        if (stat.isFile() && dirInner.endsWith(pattern)) {
            results.push(dirInner);
        }
    });
    return results;
};

var newFileArr = ['1.txt', 'file2.txt', 'file3.txt', 'file4.txt'] 

function fpArr(newFileArr) {
  const fpArray = [];
  newFileArr.forEach((file => {
      fpArray.push(findFile(dir, file).toString())
      //console.log(fpArray)
  }));
  
OutPut:

[
/some/file/path/file1.txt,
/some/file/path/1.txt,
/some/file/path/file2.txt,
/some/file/path/file3.txt,
/some/file/path/file4.txt
]

我面临的问题是我的 findFile 寻找模式匹配,并且大概在搜索“file1.txt”时它会选取“1.txt”的路径。我知道这是一种边缘情况,但这是一种重要的边缘情况,因为其他文件名可能以相同的字母或数字结尾,并且我不希望在文件路径数组输出中选取这些文件名。我已经尝试了几种想法,例如“.match()”和“.startsWith”,但是据我所知,这些想法仅适用于字符串文字或正则表达式,哪些会导致搜索本身失败。我想看看是否有办法让 findFile 函数根据某个字符串值的变量进行精确匹配?任何帮助我走向正确方向的帮助都是值得赞赏的。

[
  'K_01.00.0000.iar',
  'HELLOWORLDKLA_01.00.0000.iar',
  'HELLO_KLA_01.00.0000.iar',
  'KLA_01.22.7895.iar',
  'KLA_HELLO_WORLD_2_01.00.0000.iar',
  'KLA_02_WORLD_01.00.0000.iar'
]
[]

上面是我正在使用的实际 2 个数组。第一个数组只是一个简单的文件名数组。底部数组已通过同步和异步/等待解决方案运行。由于某种原因,即使添加了 RegExp,它仍然会拾取 2 个未在文件名数组中列出的文件。我添加了文件路径以显示根目录中没有任何文件,并将文件分散到子目录中以确保递归搜索正常工作。我会继续搞乱它,看看我是否能弄清楚为什么 RegExp 解决方案将这些文件带入数组,而它们不应该......

最佳答案

恐怕我没有足够的声誉来发表评论,所以我发布了一个答案!

您的代码似乎有效,如果我理解正确的话,您希望从目录和子目录的列表中查找所有文件,为您提供这些文件的路径。这是正确的吗?

当我运行你的代码时,它确实获取了 newFileArr 中的四个文件并排除了 1.txt,我创建了一个 codesandbox演示向您展示虚拟文件。

我还冒昧地创建了一个 codesandbox演示了如何使用 RegExp 和映射在单个函数中执行此操作以创建动态正则表达式(如果有用)。

关于javascript - 精确字符串匹配文件名数组 JavaScript/Nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61010600/

相关文章:

javascript - TypedArray 和 ArrayBuffers(node/chrome)上的 Object.freeze() 未按预期工作

javascript - 如何将数据从 .ejs 文件发送到 .js 文件?

node.js - 如何以 HTML5 输入类型日期格式(dd/mm/yyyy)显示 Mongoose 日期,

javascript - div 中的 child 点。令人头疼的 jQuery

javascript - 以 1 秒为间隔计数 1-10 并在 div 类框中打印

java - 如何在数组中添加元素?

c - 数组转置及对应的汇编代码

javascript - 选择 ISO 8601 格式的 Sqlite 日期值

javascript - 如何将整个 JavaScript 文件包装在命名函数中?

java - 添加数组末尾的对象