1248轉ABCD

因爲項目是教育類的,因此會遇到選擇題,單選多選不定項之類的,而從後臺傳過來的答案是1,2,4,8之類的數字,用來對應ABCD,採用數值相加來解決多選問題,好比後臺傳來的值是8,就是對應選項D,而穿過15,就對應1+2+4+8,也就是ABCD四個選項,起初我覺得只有ABCD四個選項,因此就只寫了四個選項的轉換,後來發現選項不止四個,甚至不定項的選項個數也是不肯定的,可是上限是26個,因此以前的方法不能用了,後來就改了一種寫法數組

function xyz(val, len) {
            //值 選項數
            let s = ""
            for (let i = len; i >= 0; i--) {
                let t = Math.pow(2, i);
                if (val - t >= 0) {
                    val = val - t;
                    s = s + String.fromCharCode(i + 65);
                }

            }
            //將選項排序
            return s.split('').sort().join('');
        };

其中val是須要進行轉換的數字,好比15,1024等等,len是選項的個數,後面的String.fromCharCode是將數根據acsll碼轉成大寫字母,後來感受傳入兩個參數在某方面不便,因此直接改爲了一個參數代碼以下函數

function xyz(val) {
            //值 
            let s = ""
            for (let i = 25; i >= 0; i--) {
                let t = Math.pow(2, i);
                if (val - t >= 0) {
                    val = val - t;
                    s = s + String.fromCharCode(i + 65);
                }

            }
            return s.split('').sort().join('');
        }

這個只須要傳入一個參數,由於字母只有26個,因此直接限制的上限,可是缺點就是會比上一種性能低,雖然我感受不出來,這個函數應該顯示傳入的val的大小,低於2^(選項個數)-1;因此當選項比較少時能夠限制一下,多的話由於我是從後臺獲取的數,因此我就沒限制,根據實際狀況吧。
另外,題目的選項是數組的索引,因此不須要用到這個方法,這個只是選擇題的答案,根據索引來顯示對應的ABCD能夠用這個:性能

function numABC(num) {
            let abc=num+65;
            return String.fromCharCode(abc); 
         }

一樣也是根據acsll碼來轉換的額,應當對傳入的值進行限制,可是我懶,哈哈。code

相關文章
相關標籤/搜索