之前在計算戳戳樂最佳的行列數時,曾經有將值排序以後,要知道它原來的 key,查了一下,大家都建議利用 Object.entries() 來排序。
像我在設計 HTML5 對對碰時,為了讓洗牌的程序好寫一點,是先以亂數決定所有牌的序號,然後依序取用,轉換成座標;也就是在牌堆中,以左上角為第一個位置為例,第一張牌的位置並不是在左上角,對我來說,不用想什麼複雜的演算法取位置,但是缺點是,倒過來時,要由位置找出是在牌堆中的第幾張牌時變得複雜了。目前的做法只好順便記錄位置編號,再來排序。
HTML5 對對碰 |
cardsLayer['numbers'] 的值是每一張牌對應到的牌面編號(故意兩兩一組分開一點,比較好看),例如:
[0, 5, 10, 4, 8, 11, 2, 7, 3, 6, 1, 9]
第一張牌在第 0 個位置,而和它配對的第二張牌在第 5 個位置,以此類推。
我需要按編號排序後,再取出它在牌堆中的索引值:
var index = Object['entries'](cardsLayer['numbers']).sort( function(a,b) {
return (a[1]-b[1]);
});
這樣的結果會是:
0: ["0", 0]
1: ["10", 1]
2: ["6", 2]
3: ["8", 3]
4: ["3", 4]
5: ["1", 5]
6: ["9", 6]
7: ["7", 7]
8: ["4", 8]
9: ["11", 9]
10: ["2", 10]
11: ["5", 11]
來檢驗一下:
編號 0 的第一張牌(HORSE)在牌堆(cardsLayer)的索引值
0: ["0", 0]
應該是 index[0][0] ,也就是 0 ;而和它配對的是馬的圖片,使用者看到則是五個位置的牌
5: ["1", 5]
index[5][0] 是多少呢?答案是「1」,這也就是牌堆(cardsLayer)中索引值 1。
編號 1 的牌(DOG),它的索引值
1: ["10", 1]
index[1][0] 為 10 ,表示 DOG 在牌堆中的索引值是 10,和它配對的索引值是 11,找一下 index 中:
9: ["11", 9]
應該編號 9 的那張牌,是不是小狗的圖片呢?
沒有留言:
張貼留言