【问题标题】:Determine if a string contains a substring within an array [NODEJS]确定字符串是否包含数组中的子字符串 [NODEJS]
【发布时间】:2017-08-03 17:52:18
【问题描述】:

我正在尝试创建一个搜索功能,它应该能够在给定各种搜索参数的情况下找到多种文件类型。

例如,我想为我的应用程序提供以下过滤器数组 ['.ini', '.exe', 'dsak_'] 并将找到的每个文件与该数组进行比较以确定文件名是否包含这些字符串之一

目前我正在使用以下代码

for(var i = 0; i < filter.length; i++){
  if(file.includes(filter[i])) results.push(file);
}

但我希望看看是否有更好的方法来实现这一点?

【问题讨论】:

  • 使用正则表达式会很容易。
  • array.join("|") 然后执行正则表达式 .match,但性能保持不变。 stackoverflow.com/questions/45372093/…
  • 性能差异测试了吗?我假设使用正则表达式在更大的周期中会有一点优势。
  • @user1893706 指的是提供的 sn-p rajesh (我的回答中包含了我)
  • 以什么方式更好?完成速度?更少的内存使用?这里有太多可能的正确答案。

标签: javascript arrays node.js substring


【解决方案1】:

Array.prototype.filter 可以帮助您找到与至少一个过滤器匹配的任何文件,Array.prototype.some 将确保您在找到第一个匹配过滤器后停止:

var matchingFiles = files.filter(file => filters.some(filter => file.includes(filter)));

【讨论】:

    【解决方案2】:

    我认为您正在寻找以下代码:

    files.filter((file) => 
        // apply filters on files to check if it matches
         filters.some((filter) => file.includes(filter))       
    )
    

    【讨论】:

    • 是的,在这种情况下 find 比 reduce 要好。
    • 谢谢@Jonasw,我现在明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2014-01-29
    • 2020-11-28
    • 2023-04-09
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多