如何只获取数组中以 "x" 或 "y" 结尾的元素?
How do I get only the elements from an array that end with "x" or "y"?
我有一个函数可以递归地在目录中搜索文件,然后 returns 将它们作为一个数组。我只想要以“.js”或“.ts”结尾的文件。为此,我正在尝试使用 Array.filter()。但是,这看起来好像行不通,因为只返回以“.js”结尾的文件。如何只过滤以“.js”或“.ts”结尾的文件?
function getFiles(dir: string): string[] {
let files: string[] = [];
fs.readdirSync(dir).forEach((file) => {
if (fs.statSync(path.join(dir, file)).isDirectory()) {
files = files.concat(getFiles(path.join(dir, file)));
} else {
files.push(path.join(dir, file));
}
});
return files;
}
const files = getFiles(path.join(__dirname, "xyz")).filter((file) => file.endsWith(".js" || ".ts"));
为什么不使用现有的包,比如 rrdir
?
这负责匹配(和排除)。它还处理错误,以及是否应遵循符号链接。
那么就和
一样简单
const rrdir = require("rrdir");
const opts = { include: [ '**/*.{js,ts}' ] };
for await ( const entry of rrdir( 'path/to/root' , opts ) ) {
// => { path: 'path/to/root/. . ./file', directory: false, symlink: false }
}
或者,如果您愿意等待整棵树被收集后再取回任何东西:
const rrdir = require('rrdir');
const opts = { include: [ '**/*.{js,ts}' ] };
const files = rrdir.sync( 'path/to/root', opts ) ;
".js" || ".ts"
的计算结果为 .js
。不幸的是你不能通过这样的条件。在浏览器控制台中尝试 运行 ".js" || ".ts"
查看。
正确的版本是:
const files = getFiles(path.join(__dirname, "xyz"))
.filter(file => file.endsWith(".js") || file.endsWith(".ts"));
或者:
const files = getFiles(path.join(__dirname, "xyz"))
.filter(file => file.match(/(j|t)s$/);
我有一个函数可以递归地在目录中搜索文件,然后 returns 将它们作为一个数组。我只想要以“.js”或“.ts”结尾的文件。为此,我正在尝试使用 Array.filter()。但是,这看起来好像行不通,因为只返回以“.js”结尾的文件。如何只过滤以“.js”或“.ts”结尾的文件?
function getFiles(dir: string): string[] {
let files: string[] = [];
fs.readdirSync(dir).forEach((file) => {
if (fs.statSync(path.join(dir, file)).isDirectory()) {
files = files.concat(getFiles(path.join(dir, file)));
} else {
files.push(path.join(dir, file));
}
});
return files;
}
const files = getFiles(path.join(__dirname, "xyz")).filter((file) => file.endsWith(".js" || ".ts"));
为什么不使用现有的包,比如 rrdir
?
这负责匹配(和排除)。它还处理错误,以及是否应遵循符号链接。
那么就和
一样简单const rrdir = require("rrdir");
const opts = { include: [ '**/*.{js,ts}' ] };
for await ( const entry of rrdir( 'path/to/root' , opts ) ) {
// => { path: 'path/to/root/. . ./file', directory: false, symlink: false }
}
或者,如果您愿意等待整棵树被收集后再取回任何东西:
const rrdir = require('rrdir');
const opts = { include: [ '**/*.{js,ts}' ] };
const files = rrdir.sync( 'path/to/root', opts ) ;
".js" || ".ts"
的计算结果为 .js
。不幸的是你不能通过这样的条件。在浏览器控制台中尝试 运行 ".js" || ".ts"
查看。
正确的版本是:
const files = getFiles(path.join(__dirname, "xyz"))
.filter(file => file.endsWith(".js") || file.endsWith(".ts"));
或者:
const files = getFiles(path.join(__dirname, "xyz"))
.filter(file => file.match(/(j|t)s$/);