2021年6月14日 星期一

JavaScript : 物件以值排序後取原來的索引值

2021年6月14日 星期一

 之前在計算戳戳樂最佳的行列數時,曾經有將值排序以後,要知道它原來的 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 的那張牌,是不是小狗的圖片呢?


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket