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

相关问题