如何在JavaScript中按是否包含文件扩展名对数组排序?
实现方法
直接用JavaScript的sort()方法自定义排序规则即可,核心逻辑是先把无文件扩展名的项优先排在顶部,同一类(无扩展名/有扩展名)的项保持字母顺序排序,具体代码如下:
const files = ['Cpp-New.html', 'dirname', 'dirname.html', 'dirname.py', 'HarryPotter', 'Java-New.html', 'poop.css', 'test01.html', 'Web-New.html']; files.sort((a, b) => { // 标记当前项是否包含文件扩展名分隔符 const aHasExt = a.includes('.'); const bHasExt = b.includes('.'); // 无扩展名的项优先级更高:a无扩展名、b有则a排前面 if (!aHasExt && bHasExt) return -1; // 反之,b无扩展名则b排前面 if (aHasExt && !bHasExt) return 1; // 同类型的项按自然字母顺序排序 return a.localeCompare(b); });
执行后得到的排序结果为:
['HarryPotter', 'dirname', 'Cpp-New.html', 'Java-New.html', 'Web-New.html', 'dirname.html', 'dirname.py', 'poop.css', 'test01.html']
补充说明:
- 用
a.includes('.')判断是否有扩展名简单直接,无扩展名的文件名不会包含. localeCompare()方法比直接的字符串比较(如a > b)更稳妥,能适配带特殊字符、大小写差异的场景,排序结果更符合日常的字母顺序习惯
内容的提问来源于stack exchange,提问作者JShahi
相关产品推荐
相关产品推荐

