You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS如何用forEach配合substr去除文本读取的文件名数组.png后缀

实现方案

1. myFunction 内部核心逻辑

你注释中写的 substr 逻辑本身是可用的,只需要补充空格处理、结果收集两步即可完成需求,完整逻辑如下:

function myFunction(rawFileName) {
  // 先去除字符串前后多余空格(解决txt用逗号+空格分隔后,每个元素带前导空格的问题)
  const trimmedName = rawFileName.trim();
  // 截取后缀前的内容,用lastIndexOf兼容文件名本身带多个点的场景
  const pureName = trimmedName.substr(0, trimmedName.lastIndexOf("."));
  // 这里可以按你的需求使用pureName,比如存入数组、打印、渲染到页面
  console.log(pureName);
  // 如果要收集所有结果可以提前声明一个数组,在这里push进去
  processedNames.push(pureName);
}

2. 实现优化建议

  • 给所有变量加上let/const声明,你原代码中的pix、myPix没有声明,会默认变成全局变量,容易引发作用域污染问题
  • 如果需要兼容文件名中带多个点的场景(比如test.v2.png),不要用indexOf('.'),改用lastIndexOf('.')取最后一个点的位置,避免错误截断文件名
  • 除了substr之外,也可以用更简洁的方法去掉后缀:trimmedName.split('.').slice(0, -1).join('.'),不管后缀是什么、文件名有多少个点都能正确处理
  • 遍历完成后如果需要把结果展示到页面,可以直接操作DOM,把收集到的纯文件名数组渲染到页面节点中

3. 完整修改后的JS代码

function loadDoc() {
  const xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState === 4 && this.status === 200) {
      const pix = this.responseText;
      const myPix = pix.split(",");
      // 存储处理完成的纯文件名
      const processedNames = [];
      
      myPix.forEach(myFunction);
      
      function myFunction(rawFileName) {
        const trimmedName = rawFileName.trim();
        const pureName = trimmedName.substr(0, trimmedName.lastIndexOf("."));
        processedNames.push(pureName);
        // 测试可直接打印结果
        console.log(pureName);
      }

      // 这里可以使用处理好的processedNames数组做后续业务逻辑
      console.log('所有无后缀文件名:', processedNames);
    }
  };
  xhttp.open("GET", "imageList.txt", true);
  xhttp.send();
}

内容的提问来源于stack exchange,提问作者wavedbabe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:15:08