[英]How Can I Iterate over JavaScript array containing single character strings?
我試圖解決在 JavaScript 中應該是一個相對簡單的練習問題。 該對象是創建一個名為shiftLetters()
的函數,該函數執行以下操作:
Array.prototype.map()
方法迭代數組中的每個字符。String.charCodeAt()
通過向前推進一個字符來對其進行轉換(例如,F 變為 G,f 變為 g)。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.';
我看到上面的代碼有以下問題,我不知道如何解決它們:
['A', 'b', 'l', 'e'...]
、 String.prototype.charCodeAt()
和String.fromCharCode()
不是數組公開的方法,不能在該上下文中使用。雖然我可以看到,如果我確實成功地創建了一個轉換的字符數組,那么使用 ```Array.prototype.join()`` 來創建一個以上述方式轉換的字符串將是一件簡單的事情。 我只是無法弄清楚如何達到這一點。
我將不勝感激,可以提供任何見解。 與此同時,我將繼續我的研究。 如果我找到答案,我會在這里發布。
在此先感謝您的幫助。
真摯地,
羅伯特·希格
您不需要map
內的 for 循環:您已經在迭代 StringArray 中的字符。 由於字符是字符串,您可以對它們使用所有字符串方法。 在這種情況下,您需要String.fromCharCode
和String.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.