2015-07-09 38 views
-1

排序的对象值与两个int和字符串INT的第一和第二串

var table = 
 
    [ 
 
     {"name":"Joe", "Level":1}, 
 
     {"name":"Bob", "Level":1B}, 
 
     {"name":"Carl", "Level": 7}, 
 
     {"name":"Mike", "Level": 1A}, 
 
     {"name":"Sal", "Level": 2} 
 
    ] 
 
var tableHeaders = scope.SortTableColumnHeaders(table) 
 

 
scope.SortTableColumnHeaders = function (array) { 
 
     var unique = {}; 
 
     var distinct = []; 
 
     for (var i in array) { 
 
      if (typeof (unique[array[i].Level]) == "undefined") { 
 
       distinct.push(array[i].Level); 
 
      } 
 
      unique[array[i].Level] = 0; 
 
     } 
 
     return distinct.sort(); 
 
    };

我有一个对象,看起来像上面的代码,其中我拉出一个不同阵列等 [1,10 ,1A,1B,2,7] 其中我可以有int(1-10)和字符串(1A,1B,1C)

我想按顺序排列int的顺序,然后将字符串排在第二位,总是看起来像 [1 ... 10,1A,1B,1C]

我尝试了distinct.sort(),但那不起作用。

+0

Id建议循环,将az添加到字符串的开头,排序,删除z。但是,然后同行的PROgrammers会问我是否用水泥代码或编译软件 – Felype

+0

什么是行不通的?发布您的代码到目前为止。 – elclanrs

+1

是你展示他们的字符串(因为他们是,他们是无效的)? – Amnon

回答

-1

一种方式做到这一点是明确列举您的排序:

var definedSort = [1,2,3,4,5,6,7,8,9,10,'1A','1B','1C']; 
 
var someArray = ['1A', 4, 8, 5, 1, 9, '1C', '1B']; 
 
    
 
someArray.sort(function(a,b) { 
 
    return definedSort.indexOf(a) - definedSort.indexOf(b); 
 
}); 
 
    
 
alert(someArray);

然而,鉴于你简单的限制,还可以实现它更令人费解的方式:

var someArray = ['1A', 4, 8, 5, 1, 9, '1C', '1B']; 
 

 
someArray.sort(function(a,b) { 
 
    return (a - b) || -a || +b || (a > b) 
 
}); 
 

 
alert(someArray);

-1

你仍然可以使用那种方法,传递一个函数来驱动你的标准:

table.sort(function(a, b){ 
    var compA = a.Level; 
    var compB = b.Level; 
    if(isNaN(compA) && isNaN(compB)){ 
     return compA.localeCompare(compB); 
    } else if(isNaN(compA)){ 
     return 1; 
    } else if(isNaN(compB)){ 
     return -1; 
    } else { 
     return compA - compB; 
    } 
}); 

在此排序,你会为字符串进行排序自己和同一之间的数字(1A,1B ...)。将两者排序在一起时,数字排在第一位。

0

好,ASCII值是连续的,且数字是不是从字母字符低,因此,如果您可以用ASCII值的总和住

var table = [ 
    {"name":"Joe", "Level": '1'}, 
    {"name":"Bob", "Level": '1B'}, 
    {"name":"Carl", "Level": '7'}, 
    ... 
] 

function sortByCharCode(a,b) { 
    function charCodeInt(s) { 
     result = 0; 
     for (var i=0;i<s.length;i++) { 
      result += s.charCodeAt(i); 
     } 
     return result; 
    } 
    a = charCodeInt(a.Level); 
    b = charCodeInt(b.Level); 
    if (a < b) return -1; 
    if (a > b) return 1; 
    return 0; 
} 

$scope.sortTable = function() { 
    $scope.table.sort(sortByCharCode); 
} 
(这将与 1A1B等工作)
相关问题