2015-04-17 47 views
0

我需要在Javascript中的方式來排序字符串在Windows中,但它似乎是不可能的。JavaScript可以像Windows一樣排序嗎?

Windows資源管理器排序是這樣的:

1.jpg - 2.jpg - 3.jpg - .... 

雖然使用Javascript排序是這樣的:

1.jpg - 10.jpg - 11.jpg - 2.jpg -... 

的Windows各種各樣的基於文件名中的數字值,而使用Javascript只是排序由字符的ASCII碼。

有時文件名不只是數字或文字,但兩者的結合,例如:

"mark 01 in school.jpg" 
"mark 02 in school.jpg" 
"john 05 in theater.jpg" 

我需要的是一個JavaScript函數,上面的排序和所示。

我的問題是:JS中是否有一個函數,或者我怎麼能自己實現一個?

+4

當然可以,你可以寫自己的算法更糟糕的情況下... http://en.wikipedia.org/wiki/Cocktail_sort –

+1

如果它是兩者的結合,是什麼您的預期結果? –

+0

糾正了很多英文錯誤 – pid

回答

0

你必須寫自己的排序功能,並把它作爲參數傳遞給排序方法。簡單的例子:

your_array.sort(sortfunction) 

function sortfunction(a, b){ 
    var num1 = extractNumberFrom(a); 
    var num2 = extractNumberFrom(b); 
    return num1 - num2; 
} 
0

只需創建一個排序回調的排序上的字符串,然後再檢查數字和正確排序的爲好,像

var arr = [ 
 
    "test2.jpg", 
 
    "test10.jpg", 
 
    "test1.jpg", 
 
    "test11.jpg" 
 
] 
 

 
arr.sort(function(a,b) { 
 
    for (var i = 0; i < a.length; i++) { 
 
     var _a = a.charAt(i), 
 
      _b = b.charAt(i), 
 
      _c = _a.localeCompare(_b); 
 
     
 
     if (_c != 0) return isNaN(_a) || isNaN(_b) ? a.localeCompare(b) : _a - _b; 
 
    } 
 
    
 
}); 
 

 
document.body.innerHTML = '<pre>' + JSON.stringify(arr, null, 4) + '</pre>';

0

我創建了一個flexibleSort函數首先檢查數組中的所有文件名是否只有數字。如果它只有數字,它會將它作爲整數/數字進行比較,否則它會將其視爲字符串。

var arr_number = ["2.jpg", "1.jpg", "3.jpg"]; 
 
var arr_string = ["mark 01 in school.jpg","mark 02 in school.jpg","john 05 in theater.jpg"]; 
 
var arr_number_1 = ["1.jpg","10.jpg","11.jpg","2.jpg"]; 
 
flexibleSort(arr_number); 
 
flexibleSort(arr_string); 
 
flexibleSort(arr_number_1); 
 

 
function flexibleSort(obj){ 
 
\t var all_number = true; 
 
\t $.each(obj, function(index, value){ 
 
\t  if(!$.isNumeric(value.split(".")[0])){ 
 
\t  \t all_number = false; 
 
\t  } 
 
\t }); 
 
\t if(all_number === true){ 
 
\t \t obj.sort(function(a, b){return parseInt(a.split(".")[0])-parseInt(b.split(".")[0])}); 
 
\t }else{ 
 
\t \t obj.sort(function(a, b){return a > b}); 
 
\t } 
 
    $.each(obj, function(index, value){ 
 
\t  $('#result').append("<p>"+value+"</p>"); 
 
\t }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div id="result"></div>

相關問題