Return 基于带有 javascript 表达式的文件扩展名的文件列表

Return a list of files based on file extension with a javascript expression

我在 return 根据文件扩展名生成文件列表时遇到问题,而且我没有足够的 javascript 经验来了解完成此操作的正确语法。该表达式处理 file.basename 但不处理 file.nameext,所以我不确定如何有效地解析。这是在 Common Workflow Language 表达式工具中编写一个 javascript 表达式,作为工作流的一部分。

假设该目录有 .txt、.gz 和 .gz.foo,我想要 return 所有 .gz 文件的列表。

${
  var gzs = [];

  for (var i = 0; i < inputs.dir.listing.length; i++) {
    var file = inputs.dir.listing[i];
    if file.basename.match(".gz"); {
      gzs.push(file);
    }
  }

  return {
    "gzs": gzs
  };
}
\.gz$

是更适合您的正则表达式。点符号应该被转义,$ 将只检查行尾的 .gz 子字符串。

您可以使用 split 和点 (.) 作为分隔符来拆分文件名。这将给出一个数组。在此数组中检查最后一个元素。如果匹配,则将文件放入数组中。

其次,您使用的是 return 语句,但我看不到函数。将您的代码放入函数中

let inputs = {
  dir: {
    listing: ['abc.gz', 'def.sb', 'ghi.gz', 'jkl.er.km']
  }
}

function giveGzFile() {
  let gzs = [];
  for (var i = 0; i < inputs.dir.listing.length; i++) {
    var file = inputs.dir.listing[i];
    let splitedFileName = file.split('.');
    if (splitedFileName[splitedFileName.length - 1] === "gz") {
      gzs.push(file);
    }
  }
  return {
    "gzs": gzs
  };
}
console.log(giveGzFile())