2012-03-08 49 views
-1

我想以特定的方式對數組進行排序,並且試圖有效地執行它,最好使用.sort()函數。下面是示例那樣的數組我需要工作的:javascript:用整數和字符以某種方式對數組進行排序

["13", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "3a", "2s", "2", "2a"] 

規則:

在排序整數值

["10", "11", "12", "13", "2", "3", "4", "5", "6", "7", "8", "9", "2a", "2s", "3a"] 

這裏就是我要找的排序後降序。具有附加「a」的整數具有較小的值。附加了「s」的整數具有更大的價值。因此,2a將介於2和1之間,2將介於3和2之間。3a將大於2s。

請幫忙!

+2

你在哪裏卡住了? – bfavaretto 2012-03-08 00:33:55

+0

您可以使用您喜歡的任何邏輯對成員進行排序,提供[compareFunction to sort](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort)。 – RobG 2012-03-08 00:43:29

+1

你意識到數組會導致非法令牌錯誤?你的意思是他們都是絃樂? – paislee 2012-03-08 00:44:45

回答

2

以下是使用javascript .sort()函數的方法。既然你想允許「2a」和「2s」,我假設所有的輸入都是字符串。

工作演示在這裏:http://jsfiddle.net/jfriend00/NDbcC/

var input = ["10", "11", "12", "13", "2", "3", "4", "5", "6", "7", "8", "9", "2a", "2s", "3a"]; 

var suffix = {"s": 1, "a": -1, 
     "0": 0, "1": 0, "2": 0, "3": 0, "4": 0, "5": 0, 
     "6": 0, "7": 0, "8": 0, "9": 0}; 

input.sort(function(a, b) { 
    var numA = parseInt(a, 10), numB = parseInt(b, 10); 
    if (numA == numB) { 
     numB = suffix[b.charAt(b.length - 1)]; 
     numA = suffix[a.charAt(a.length - 1)]; 
    } 
    return(numB - numA); 
}); 

//output is: 
// ["13", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "3a", "2s", "2", "2a"] 
+0

這就是我正在尋找的東西。比我的答案還要短。謝謝! – Zyren 2012-03-08 01:22:10

1

基本上,您需要解析出數字並對其進行比較,如果以下字符爲「a」則加1,如果以下字符爲「s」(因爲它是逆序排序),則減1。

這是我想出了,它都將一個字符串數組或一個混合字符串和數字上工作:

var weirdSort = (function() { 
    var chr = String.prototype.charAt, 
     add = {a:1, s:-1}; 

    return function (a, b) { 
     var intA = parseInt(a), intB = parseInt(b); 

     if (intA === intB) { 
      if (isNaN(a)) 
       intB = intA + add[chr.call(a, 1)]; 

      if (isNaN(b)) 
       intA = intB + add[chr.call(b, 1)]; 
     } 

     return intB - intA; 
    } 
})(); 

[10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9, "2a", "2s", "3a"].sort(weirdSort); 
//-> [13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, "3a", "2s", 2, "2a"] 

有可能是一個更簡單的方法,但我想我的大腦能在凌晨1點滿負荷工作時請原諒。

+0

**不可**。這只是明智的。 – 2012-03-08 08:11:04

相關問題