JavaScript中如何连接数组除最后一个元素以获取完整文件名
解决多后缀文件名的截取问题(不含最后一个后缀)
你的问题出在原代码只取了split后数组的倒数第二个元素,这在文件名包含多个点的时候,自然只能拿到最后一个点和倒数第二个点之间的片段,而不是完整的前缀部分。
这里给你两种靠谱的解决方法:
方法一:用lastIndexOf定位最后一个点(推荐)
直接找到文件名中最后一个.的位置,然后截取前面的内容作为文件名,后面的作为后缀,逻辑更简洁,也能处理各种边界情况:
const originalName = file[0].name; const lastDotPos = originalName.lastIndexOf('.'); // 处理有无后缀的情况 const filename = lastDotPos !== -1 ? originalName.slice(0, lastDotPos) : originalName; const filetype = lastDotPos !== -1 ? originalName.slice(lastDotPos + 1) : '';
比如对upload.file1.img.2002.txt,lastDotPos会定位到最后一个.的位置,slice(0, lastDotPos)就能得到upload.file1.img.2002,完美符合需求。
方法二:split后拼接除最后一个元素外的部分
如果还是想用split的思路,可以先把最后一个元素弹出作为后缀,剩下的元素再用.拼接起来:
const nameParts = file[0].name.split('.'); const filetype = nameParts.pop(); let filename = nameParts.join('.'); // 处理特殊情况:比如文件名是".gitignore"或者只有后缀的情况 if (filename === '') { filename = `.${filetype}`; filetype = ''; }
这种方法要注意边界处理,比如当文件名以.开头时,split后会得到一个空字符串开头的数组,这时候pop后拼接出来的filename是空的,需要把原文件名(带.)赋值给filename,后缀设为空。
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

