假设我有一个包含(随机)整数和字符串元素的数组:
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函数?
答案 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);
现在不使用indexOf
,而是使用数组中的值作为ref对象的索引,并让它返回一个我可以用来排序的值(注意:我安排了值以匹配实际的卡号)。