如何将文件夹中的图像推送到数组中?

问题描述 投票:0回答:1

这是我第一次在 stack Overflow 上发布问题,但我会尽力解释它。我正在尝试将 .jpg 信息从服务器上的文件夹加载到数组中,每个图像都会加载到不同的位置。目前我只能获取 jpg 图像,但它们都转到 image[0]。如果可能的话,我正在尝试使用nodejs和fs来做到这一点。

代码是:

 const fs = require("fs");

 function getFolderFiles(path, extension) {
     let files = fs.readdirSync(path);
     return files.filter((file) =>
       file.match(new RegExp(`.*\.(${extension})`, "ig"))
     );
 }

 console.log(getFolderFiles("./broll", ".jpg"));
 images = [getFolderFiles("./broll", ".jpg")];
 console.log(images[0]);

目前已推出

[ 'image1.jpg', 'image2.jpg', 'image3.jpg' ]
[ 'image1.jpg', 'image2.jpg', 'image3.jpg' ]

我正在尝试获取 console.log (images[0]); to = image1.jpg 等等。

我的最终目标是返回如下所示的内容,但在弄清楚阵列设置后我将处理其他信息。

 // var images = [
 //   {
 //     path: "./broll/image1.jpg",
 //     caption: captions,
 //     loop: imagelength,
 //   },

我一直在互联网上搜索,但找不到我理解的解决方案,因为我对编程相对较新。

node.js arrays image jpeg getfiles
1个回答
0
投票

首先,正则表达式的构造是错误的,因为当你将字符串传递给

RegExp
构造函数时,你必须转义
\ 
才能使其显示在正则表达式中,即

new RegExp(`.*\\.(${extension})`, "ig")

但是如果你这样做,你会得到以下结果

RegExp

new RegExp(`.*\\..jpg`, "ig");

即,任意(可能为空)字符串(与

.*
匹配),后跟文字
.
(与
\\.
匹配),后跟任意字符(与
.
匹配),后跟文字
jpg 
。而且您还缺少单词边界,即您的正则表达式也会匹配类似
foo.ajpg.bar

的内容

更好的方法是将正则表达式定义为

new RegExp(`.+\\.${extension}$`, "ig")

并且仅传递“jpg”(即不带点)作为扩展名。这将匹配长度至少为 1 (

.+
) 的任意字符串,后跟
.
(
\\.
),后跟单词末尾的扩展名 (与
$
匹配)

第二,当你这样做时

images = [getFolderFiles("./broll", ".jpg")];

您正在创建一个新数组,结果

getFolderFiles
是该数组的第一个元素。但由于
getFolderFiles
的结果已经是一个数组,所以最终会得到以下结构

[["image0.jpg", "image1.jpg"]]

你可能只是想要

images = getFolderFiles("./broll", ".jpg");
© www.soinside.com 2019 - 2024. All rights reserved.