【问题标题】:Index 0 of array is undefined after someEmptyArray.push(data)在 someEmptyArray.push(data) 之后未定义数组的索引 0
【发布时间】:2026-02-21 10:15:01
【问题描述】:

我正在运行fs.readdir 以返回目录中的文件名数组。我正在运行一些正则表达式函数来过滤掉我不想显示的某些文件名和/或文件类型。

使用以下代码,我返回了一个新的过滤数组,但数组的 0 索引返回未定义。

对于代码格式化,我很抱歉,我在用手机,无法使用可以上网的电脑。

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

这将返回 `[undefined, 'file_1.js'] 为什么会发生这种情况,我该如何摆脱它?

谢谢

【问题讨论】:

  • index--放在push之前。
  • 或者把这个 var index = files.length 改成 var index = files.length -1;

标签: javascript arrays node.js undefined


【解决方案1】:

files[index] 第一次是undefined,因为数组的长度总是大于最大索引(从零开始的索引)。将 index-- 向上移动一行,它会起作用,但是您会遗漏第一个元素,因此与 >=0 或 index-1 比较以获取所有元素。

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

【讨论】:

  • 我更喜欢在while 循环中使用0>= 以提高可读性,但它不起作用。虽然 files[index-1] 有效。谢谢!