簡體   English   中英

如何迭代包含單個字符串的 JavaScript 數組?

[英]How Can I Iterate over JavaScript array containing single character strings?

我試圖解決在 JavaScript 中應該是一個相對簡單的練習問題。 該對象是創建一個名為shiftLetters()的函數,該函數執行以下操作:

  1. 將作為參數傳遞的字符串轉換為由字符串中的單個字母組成的字符串數組。
  2. 使用Array.prototype.map()方法迭代數組中的每個字符。
  3. 如果字符是空格,則不應對其進行轉換。
  4. 如果字符是字母數字,則應使用String.charCodeAt()通過向前推進一個字符來對其進行轉換(例如,F 變為 G,f 變為 g)。
  5. 使用String.fromCharCode()組合一個字符串,例如,“我不能說謊”被轉換為“J dboopu ufmm b mjf”。

到目前為止,這是我的代碼:

var shiftLetters = function(string){
  // 1. Convert string to an array of characters.
  const stringArray = string.split('');
  const mappedString = stringArray.map( (char) => {
    for (char in mappedString) {
      // TO BE DONE
    }
  });
}

const example = 'Able was I ere I saw Elba.';

我看到上面的代碼有以下問題,我不知道如何解決它們:

  • 盡管字符串——在這個例子中,“Able was I ere I seen Elba.”——被成功地轉換成一個由單個字符組成的數組,例如['A', 'b', 'l', 'e'...]String.prototype.charCodeAt()String.fromCharCode()不是數組公開的方法,不能在該上下文中使用。
  • 在對 MDN 和其他在線資源的搜索中,我一直無法發現任何可以引用數組中的索引並獲取該元素的 ASCII 字符代碼的可用方法。

雖然我可以看到,如果我確實成功地創建了一個轉換的字符數組,那么使用 ```Array.prototype.join()`` 來創建一個以上述方式轉換的字符串將是一件簡單的事情。 我只是無法弄清楚如何達到這一點。

我將不勝感激,可以提供任何見解。 與此同時,我將繼續我的研究。 如果我找到答案,我會在這里發布。

在此先感謝您的幫助。

真摯地,

羅伯特·希格

您不需要map內的 for 循環:您已經在迭代 StringArray 中的字符。 由於字符是字符串,您可以對它們使用所有字符串方法。 在這種情況下,您需要String.fromCharCodeString.charCodeAt

var shiftLetters = function(string){
  // 1. Convert string to an array of characters.
  const stringArray = string.split('');
  const transformedStringArray = stringArray.map( (char) => {
    if (/[A-Za-z0-9]/.test(char)){
      return String.fromCharCode(char.charCodeAt() + 1);
    } 
    else {
      return char;
    }
  })
  return transformedStringArray.join('');
}

您可以獲取字符代碼,添加一個並獲取新字符。

 const shiftLetters = string => string .split('') .map(c => c === ' ' || !/[az\\d]/i.test(c) ? c : String.fromCharCode(c.charCodeAt(0) + 1)) .join(''), example = 'Able was I ere I saw Elba.'; console.log(shiftLetters(example));

這是最簡潔的,不會太難理解

var shiftLetters = string => (
    string.split('').map( c => (
        String.fromCharCode( c.charCodeAt(0) + !!c.match(/[A-Za-z\d]/) )
    )).join("")
);

請注意,我使用的是隱式返回,因此缺少顯式返回語句。 這個解決方案最棘手的部分是這條線

c.charCodeAt(0) + !!c.match(/[A-Za-z\d]/)

在這里,我們檢查 c 是否是帶有match的純字母數字字符。 如果是, match將返回一個Match對象,否則我們得到 null。 然后, !! 將真/假(匹配對象與空)值轉換為布爾值。 最后,在 JavaScript 中對布爾值進行算術運算時,false = 0 和 true = 1。因此該語句會將每個字母數字字符映射到下一個字符,並將所有其他字符映射到它們自身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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