簡體   English   中英

使用另一個數組的索引從數組中獲取元素

[英]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()通過索引alphabetresult轉換回字符。 然后使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM