2013-12-19 53 views
0

假設我有含(隨機地)一個數組整數和字符串元素:我如何排序數組中的元素,包含字符串和整數?

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

「純粹的JavaScript」是一個用詞不當。永遠不要再說那句話。 –

+0

@BradM請問你爲什麼?作爲一個例子,[JSFiddle](http://jsfiddle.net/)恰好使用這個短語。 – VisioN

+0

@BradM「純粹的JavaScript」是一種俗語說「沒有jQuery」的方式。這個問題是合法的。 – brandonscript

回答

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對象,並讓它返回一個值,我可以用它來排序(注意:我安排的值與實際的卡號相匹配)。

+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()

+0

感謝您的回答,特別是「N.B」相關內容和jQuery。 +1。 –

相關問題