使用节点js按名称过滤

filtered by name using node js

有什么方法可以过滤给定扩展名的文件,然后进一步过滤它们 例如:我有 .txt 扩展名,我想从数组

中获取我所有的 .txt
file= 
[ "animal_bio.txt",
  "xray.pdf",
  "fish_bio.txt",
  "mammal_doc.txt",
  "human_bio.txt",
  "machine.jpg"
]

过滤后的输出包含所有 .txt 扩展名,而且它应该包含所有具有 _bio.txt 名称的文件。

所以输出看起来像

futherFile=
[ "human_bio.txt",
  "fish_bio.txt",
  "animal_bio.txt"
]

您可以使用 String.protytype.endsWith 函数将字符串与您的扩展名进行比较

const file = 
[ "animal_bio.txt",
  "xray.pdf",
  "fish_bio.txt",
  "mammal_doc.txt",
  "human_bio.txt",
  "machine.jpg"
]
result = file.filter((fileName) => fileName.endsWith("_bio.txt"));
console.log(result)

您可以使用 ES6 中的过滤器功能,例如:

const txtFile = file.filter((item) => (item.split('_'))[1] === 'bio.txt')

可以用Array.filter的方式过滤,用String.endsWith的方式过滤。一个例子-

// List of files

file = ["animal_bio.txt",
  "xray.pdf",
  "fish_bio.txt",
  "mammal_doc.txt",
  "human_bio.txt",
  "machine.jpg"
]

// Filtering by extension

file.filter(x => x.endsWith(".txt"));

希望对您有所帮助:)

您可以使用 reduce and match

轻松实现此结果

匹配 docbio 时,您甚至可以使用正则表达式 /_bio.txt$/ 限制更多以仅当 _doc.txt 位于字符串末尾时才获取字符串]

const arr = [
  {
    id: "1",
    name: "animal_bio.txt",
  },
  {
    id: "2",
    name: "xray.pdf",
  },
  {
    id: "3",
    name: "animal_doc.txt",
  },
  {
    id: "4",
    name: "fish_doc.txt",
  },
  {
    id: "5",
    name: "flower_petals.jpg",
  },
  {
    id: "5",
    name: "plant_roots.jpg",
  },
  {
    id: "6",
    name: "human_image.jpg",
  },
  {
    id: "7",
    name: "human_bio.txt",
  },
  {
    id: "8",
    name: "mammal_doc.txt",
  },
];

const result = arr.reduce((acc, { name }) => {
    if (name.match(/\.txt$/)) {
      if (name.match(/_bio/)) {
        acc[0].push(name);
      } else {
        acc[1].push(name);
      }
    }
    return acc;
  },
  [[], []]
);

console.log(result);

然后你可以得到包含docbio的元素使用数组解构as

const [bioArr, docArr] = result;
console.log(bioArr);
console.log(docArr);

const arr = [
  {
    id: "1",
    name: "animal_bio.txt",
  },
  {
    id: "2",
    name: "xray.pdf",
  },
  {
    id: "3",
    name: "animal_doc.txt",
  },
  {
    id: "4",
    name: "fish_doc.txt",
  },
  {
    id: "5",
    name: "flower_petals.jpg",
  },
  {
    id: "5",
    name: "plant_roots.jpg",
  },
  {
    id: "6",
    name: "human_image.jpg",
  },
  {
    id: "7",
    name: "human_bio.txt",
  },
  {
    id: "8",
    name: "mammal_doc.txt",
  },
];

const result = arr.reduce(
  (acc, { name }) => {
    if (name.match(/\.txt$/)) {
      if (name.match(/_bio/)) {
        acc[0].push(name);
      } else {
        acc[1].push(name);
      }
    }
    return acc;
  },
  [[], []]
);

const [bioArr, docArr] = result;
console.log(bioArr);
console.log(docArr);