【问题标题】:What is the simplest way to prefix all strings in an array with a "!" (exclamation mark) in javascript?用“!”为数组中的所有字符串添加前缀的最简单方法是什么? (感叹号)在javascript中?
【发布时间】:2014-07-06 14:41:35
【问题描述】:

当我想要包含或排除系统文件时,我使用了两个变量(使用 minimatch glob 语法,其中 ! 代表排除)。

var systemFiles = ['node_modules/**/*', '.git/**/*'];
var ignoredSystemFiles = ['!node_modules/**/*', '!.git/**/*'];

但这感觉有点多余。有没有一种简单的方法可以将systemFiles 数组转换为ignoredSystemFiles 数组(即:在systemFiles 中的所有项目前加上!)?

我知道!systemFiles 不起作用,但是像这样紧凑的东西会很棒,因为它可以让我消除ignoredSystemFiles 变量。

【问题讨论】:

  • 使用Array.prototype.map

标签: javascript arrays node.js glob minimatch


【解决方案1】:

你可以用这个

var systemFiles = ['node_modules/**/*', '.git/**/*'];
var ignoredSystemFiles = systemFiles.map(function(el) { return '!' + el } );

【讨论】:

    【解决方案2】:

    一个简单的循环应该可以做到:

    var ignoredSystemFiles = new Array(systemFiles.length);
    for(var i = 0; i < systemFiles.length; i++) {
        ignoredSystemFiles[i] = '!' + systemFiles[i];
    }
    

    或者如果你使用足够新的浏览器并且不关心ie

    var ignoredSystemFiles = systemFiles.map(function(v) { return '!' + v; })
    

    【讨论】:

    • 您可以从[] 开始,然后使用push 使循环更简单一点,但这可能是Node,所以map 很好。
    • 这样更高效,因为预先分配了数组,我想像这样的小循环没关系。
    • 不过效率并不高。你做过基准测试吗?
    • @minitech 是,在 Node 领域 - v8 仍然没有优化数组方法调用,这更快,因为循环比 .map 快,而不是因为预分配了 2 项数组。注意:这完全无关紧要,为了清楚起见,我会使用 .map。
    • @BenjaminGruenbaum:我的意思是“比push更有效率”; V8 是否仍将这些视为稀疏数组,从而带来相关的性能损失?
    猜你喜欢
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多