2015-04-17 115 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>

相关问题