[英]Grab elements from array using indexes of another array
我正在研究一個 Codewars 問題,並且已經能夠解決這個問題的大部分,除了最后一部分。 挑戰是“rot13”
ROT13 是一個簡單的字母替換密碼,它用字母表中的 13 個字母替換一個字母。 ROT13 是凱撒密碼的一個例子。 創建一個 function,它接受一個字符串並返回使用 Rot13 加密的字符串。
function rot13(message){
message = message.split('');
let alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
let indexes = message.map(char => alphabet.indexOf(char));
let result = indexes.map(i => {
let val = i + 13;
let max = 26;
if (val > max) {
let temp = val - max;
val = temp;
}
return val;
});
//result = [6, 17, 5, 6];
//i want to use the elements in my result array, and
//grab the letters from my alphabet array whose indexes associate with those elements from my result array
}
rot13('test') // 'grfg'
這是我目前在這個問題中的 state。 我嘗試檢查字母表中元素的任何索引是否===我的結果數組中的元素,如果是,則將這些字符從我的字母表數組推入一個空數組,但我收到-1
解決這個問題/改變我的思維過程的任何建議都會有所幫助。 謝謝!
要直接回答您的問題,您只需添加:
return results.map(i => alphabet[i]).join('')
在 function 的末尾。
作為旁注,您可以使用String.fromCharCode
function,而不是使用字母數組。 它將一個數字轉換為等價的 ASCII 字符(大寫字母從 65 開始)。
function rot13(message){ message = message.split(''); let alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']; let indexes = message.map(char => alphabet.indexOf(char)); let result = indexes.map(i => { let val = i + 13; let max = 26; if (val > max) { let temp = val - max; val = temp; } return val; }); return result.map(i => alphabet[i]).join(''); } console.log(rot13('test')) // 'grfg'
嘗試這個
function rot13(message) { message = message.split(''); let alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; return message.map(char => { let i = alphabet.indexOf(char); i = (i + 13) % alphabet.length; return alphabet[i]; }).join(""); } console.log(rot13('test')); // 'grfg'
使用另一個map()
通過索引alphabet
將result
轉換回字符。 然后使用join('')
使其成為字符串。 然后將其返回給調用者。
您可以使用模數簡化 ROT13 計算。
function rot13(message) { message = message.split(''); let alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']; let indexes = message.map(char => alphabet.indexOf(char)); let result = indexes.map(i => { let val = (i + 13) % 26; return val; }); return result.map(i => alphabet[i]).join(''); } console.log(rot13('test'));
請注意,這只有在字符串僅包含小寫字母時才能正常工作。 其他任何東西都會從indexOf
返回-1
,你需要檢查一下。
嘗試這個:
function rot13(message){
message = message.split('');
let finalResult = "";
const alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
message.forEach(item => {
const index = alphabet.indexOf(item);
let cipherIndex = index + 13;
if(cipherIndex > 25)
cipherIndex = index - 13
finalResult = finalResult + alphabet[cipherIndex]
})
return finalResult;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.