如何对数组中的元素进行排序,包含字符串和整数?

时间:2013-12-19 17:46:31

标签: javascript jquery

假设我有一个包含(随机)整数和字符串元素的数组:

var array = ["T", 5, 2, 9, "A"];

可能的元素或参考是:

var ref = ["A", "K", "Q", "J", "T", 9, 8, 7, 6, 5, 4, 3, 2];

其中A是最高(最有价值),K是第二最有价值的,依此类推。 正如你们大多数人所看到的,这代表了一副牌中的不同牌。

如何处理并对上面的array进行排序,以获得输出:

array = ["A", "T", 9, 5, 2];

由于我正在尝试学习javascript,我更喜欢纯粹的javascript解决方案,但我也想知道是否有用于执行此任务的jQuery函数?

2 个答案:

答案 0 :(得分:7)

这是一种可能的简短方法:

array.sort(function(a, b) {
    return ref.indexOf(a) - ref.indexOf(b);
});

N.B。:请注意Array.prototype.indexOf方法有limited browser compatibility,因此如果需要,请使用shim。但是jQuery有自己的跨浏览器实现,名为$.inArray()

答案 1 :(得分:1)

与VisionN的方法类似,这是一种避免需要indexOf的方法。我用对象文字替换了引用数组(注意:这看起来有点奇怪):

var array = ["T", 5, 2, 9, "A"];
var ref = {A:14, K:13, Q:12, J:11, T:10, 9:9, 8:8, 7:7, 6:6, 5:5, 4:4, 3:3, 2:2};

array.sort(function(a, b) {
    return ref[b] - ref[a];
});

console.log(array);

Fiddle

现在不使用indexOf,而是使用数组中的值作为ref对象的索引,并让它返回一个我可以用来排序的值(注意:我安排了值以匹配实际的卡号)。