我寫了一個簡單的 for 回圈,以更好地理解 charCodeAt() 和 fromCharCode() 并解決 odin 專案的 Caesar 密碼練習,您必須撰寫函式來編碼字串。
它在第一次迭代時停止,我不知道為什么。當我控制臺記錄 str.charCodeAt(i) 時,它會回圈,但是當我添加函式的其余部分時,它會停止。
function uniCode(str, num) {
for(let i = 0; i < str.length;i ) {
//console.log(str.charCodeAt(i) num);
let charCode = str.charCodeAt(i) num;
let newStr = String.fromCharCode(charCode);
return newStr;
}
}
uniCode("Help!", 3);
'K'
很高興有任何幫助!
謝謝!
uj5u.com熱心網友回復:
使用您的代碼,您可以遍歷引數中給定字串的所有字符
但是你return newStr;在回圈中它會停止回圈迭代
function uniCode(str, num) {
var newStr = "";
for(let i = 0; i < str.length;i ) {
console.log(str.charCodeAt(i) num);
let charCode = str.charCodeAt(i);
newStr = String.fromCharCode(charCode);
}
console.log(newStr);
return newStr;
}
uniCode("Help!", 3);
uj5u.com熱心網友回復:
它正在停止,因為您已經通過 using 告訴它return newStr;,它會立即終止函式并回傳newStr。
對于你正在做的事情,你想建立新的字串,然后在最后回傳它:
function uniCode(str, num) {
let newStr = "";
for (let i = 0; i < str.length; i ) {
let charCode = str.charCodeAt(i) num;
let newChar = String.fromCharCode(charCode);
newStr = newChar;
}
return newStr;
}
現場示例:
顯示代碼片段
function uniCode(str, num) {
let newStr = "";
for (let i = 0; i < str.length; i ) {
let charCode = str.charCodeAt(i) num;
let newChar = String.fromCharCode(charCode);
newStr = newChar;
}
return newStr;
}
console.log(uniCode("Help!", 3)); // "Khos$"
但是請注意,當您遍歷這樣的字串時,您正在使用代碼單元,而不是代碼點,如果存在需要多個代碼單元來處理的代碼點,這可能會使您的結果非常奇怪。(如果這些術語不熟悉,請參閱我的博客文章。)您可能想改用for-of它,因為它適用于代碼點:
function uniCode(str, num) {
let newStr = "";
for (const char of str) {
const codePointValue = char.codePointAt(0) num;
const newChar = String.fromCodePoint(codePointValue);
newStr = newChar;
}
return newStr;
}
現場示例:
顯示代碼片段
function uniCode(str, num) {
let newStr = "";
for (const char of str) {
const codePointValue = char.codePointAt(0) num;
const newChar = String.fromCodePoint(codePointValue);
newStr = newChar;
}
return newStr;
}
function oldUniCode(str, num) {
let newStr = "";
for (let i = 0; i < str.length; i ) {
let charCode = str.charCodeAt(i) num;
let newChar = String.fromCharCode(charCode);
newStr = newChar;
}
return newStr;
}
console.log("New: " uniCode("Help!??", 3)); // "New: Khos$??"
console.log("Old: " oldUniCode("Help!??", 3)); // "Old: Khos$??"
uj5u.com熱心網友回復:
這里的問題是return導致問題的回圈末尾的陳述句。
您可以創建一個變數并附newStr加到它并在回圈之后回傳字串值
function uniCode(str, num) {
let finalStr = ""
for(let i = 0; i < str.length;i ) {
let charCode = str.charCodeAt(i) num;
let newStr = String.fromCharCode(charCode);
finalStr = finalStr newStr;
}
return finalStr
}
uniCode("Help!", 3);
'Khos$'
您可以使用以下reduce功能使代碼更好:
function uniCode(str, num) {
return str
.split('')
.map(x=>x.charCodeAt(0))
.reduce((total, curr) => (total String.fromCharCode(curr num)), "")
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/405651.html
標籤:
