因爲項目是教育類的,因此會遇到選擇題,單選多選不定項之類的,而從後臺傳過來的答案是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