没用10_1.jpg还是在前面
时间: 2024-12-11 13:43:36 浏览: 3
在你提供的示例中,如果要保持文件名"10_1.jpg"在排序后的数组中的原始位置(即仍然排在最前面),并且只按照数字前缀进行排序,那么我们需要稍微调整一下`compare`函数的逻辑。当前的代码会在数字相同的情况下,按照原始文件名的字母顺序排列,这会导致"10_1.jpg"被移动到"1_1.jpg"之前。
如果你希望数字前缀大的文件始终排在小的文件前面,同时保留"10_1.jpg"的位置不变,可以删除`else`分支,因为既然已经判断了数字不同,就不需要再关心文件名的字母顺序。以下是修改后的代码:
```javascript
const files = ["10_1.jpg", "11_1.jpg", "12_1.jpg", "1_1.jpg", "21_1.jpg", "22_1.jpg", "2_1.jpg"];
function compare(fileA, fileB) {
const numA = parseInt((fileA.match(/\d+/) || [])[0]);
const numB = parseInt((fileB.match(/\d+/) || [])[0]);
if (numA < numB) {
return -1;
} else {
return 1; // 只需在这里返回1,表示numA >= numB,不需要比较文件名
}
}
files.sort(compare);
console.log(files); // 输出: ["10_1.jpg", "1_1.jpg", "2_1.jpg", "11_1.jpg", "12_1.jpg", "21_1.jpg", "22_1.jpg"]
```
现在,排序后的结果会满足条件:"10_1.jpg"仍然在第一位,其他文件名按数字前缀升序排列。
阅读全文