【问题标题】:Using concat method with closure in child functions在子函数中使用带有闭包的 concat 方法
【发布时间】:2017-08-26 08:09:12
【问题描述】:

我想在子函数的范围内使用.concat,而不是推送,然后在范围链的上层访问它。

我这里有一个简单的函数,可以在通过正则表达式函数运行文件后列出目录中的文件,以过滤掉某些文件名和文件类型。以下函数适用于 .push 数组方法,但如果我尝试使用 .concat ,它会返回一个空数组

fs.readdir('./schema', function(err,files){
  var filelist = [];
  if(err)
    throw err;
  else{
    var index = files.length;
    while(index>0){
      filelist.concat(isNOTswapfile(files[index]));
      index--;
      }
    console.log(filelist)
    }
  }
)

返回一个空数组[]

欢迎和赞赏帮助。

【问题讨论】:

  • 你是如何使用 concat 的?向我们展示不起作用的代码。
  • 你必须分配 concat 的结果,因为它返回一个新数组。
  • @Yatrix 抱歉,一个模组(可能是最初将其标记为重复的同一个模组)通过在此处复制和粘贴我的原始(和错误)帖子来编辑我的帖子。从那以后,我重新编辑了帖子。对不起!
  • @changed 有没有办法在不重新分配的情况下做到这一点?我正在尝试将某些类型的编程原则应用于我的代码(例如不使用改变代码的方法)。我认为重新分配是一些编程范式可能会发现问题的突变是错误的吗?
  • 您可以使用Array.prototype.push.apply( array1, array2 ) 就地添加到array1。

标签: javascript arrays scope closures


【解决方案1】:

concat 返回一个新的数组。因此,除非您重新分配 filelist 变量,否则它将保持 []

while(index>0){
  filelist = filelist.concat(isNOTswapfile(files[index]));
  index--;
}
console.log(filelist)

应该可以正常工作。

您可以在MDN Array.prototype.concat阅读更多内容

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 2020-10-10
    • 2018-03-24
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多