這是我的第一篇文章,所以我希望我能正確地做到這一點。
我正在上一個編程課,我們被要求撰寫一段代碼,要求輸入一個短語,并在控制臺中回傳那個大寫字母移到前面的短語,但仍然以相同的順序。然后將這個重新排序的短語列印到控制臺。(我們不允許使用陣列)例如:輸入"HeLLoTherE"會回傳"HLLTEeoher"
但是問題是我在理解如何撰寫此代碼時遇到問題。如何讓代碼選擇這些大寫字母并將它們移到前面?使用 .toUpperCase()?我怎樣才能選擇字母并將其移動到其他字母的前面?如果有人可以向我展示如何做到這一點并稍微解釋一下,我將不勝感激:)
uj5u.com熱心網友回復:
好吧,你不能使用陣列,這有點困難,但是你仍然可以做一些事情。
雖然我使用的是 for 回圈,但我實際上并沒有使用陣列。由于字串允許[]運算子,因此您可以使用索引來選擇字串的每個字符并檢查它是小寫還是大寫。
另外,你說你需要保持大寫字母的順序,所以你不能只做newStr = upper newStr,因為它會恢復原來的順序。所以,我用string.prototype.substring()將大寫字符插入它應該在的位置。
const str = "HeLLoTherE";
const moveUpperToFront = (target) => {
// Strings are immutable in js, so you cannot move one character
// to the front without using a new string.
let newStr = "";
// Number of uppercase letters that appeared.
// It's necessary because you need to mantain the original order
let upperNumber = 0;
// Iterate each character from beginning
for (let i = 0; i < str.length; i) {
// Is there an uppercase letter?
if (str[i].charCodeAt() >= 65 && str[i].charCodeAt() <= 90) {
newStr =
newStr.substring(0, upperNumber)
str[i]
newStr.substring(upperNumber, newStr.length);
upperNumber;
}
// No uppercase letter?
else
newStr = str[i];
}
return newStr;
};
console.log(moveUpperToFront(str));
uj5u.com熱心網友回復:
您可能只是從最直接的演算法開始,以使某些東西正常作業。
let value = "HeLLoTherE";
let result = "";
for (let char of value) {
if (char >= "A" && char <= "Z") {
result = char;
}
}
for (let char of value) {
if (char >= "a" && char <= "z") {
result = char;
}
}
console.log(result);
然后,您可以通過組合條件來合并 2 個回圈。
let value = "HeLLoTherE";
let upper = "";
let lower = "";
for (let char of value) {
if (char >= "A" && char <= "Z") {
upper = char;
} else if (char >= "a" && char <= "z") {
lower = char;
}
}
console.log(upper lower);
解決這個問題的另一種方法是使用正則運算式。
var value = "HeLLoTherE";
var upper = value.replace(/[^A-Z]*/g, "");
var lower = value.replace(/[^a-z]*/g, "");
console.log(upper lower);
uj5u.com熱心網友回復:
這個答案試圖在不使用“陣列”的情況下實作預期目標。它確實使用反引號,但如果需要,可以用簡單的字串連接替換。
代碼片段
// move upper-case letters while
// keeping relative order same
const capsWithOrder = str => {
// initialize result variables
let capsOnly = "", restAll = "";
// iterate over the given string input
for (let i = 0; i < str.length; i ) {
// if character at index "i" is upper-case
// then, concatenate character to "capsOnly"
// else, concatenate to "restAll"
if (str[i] === str[i].toUpperCase()) capsOnly = str[i];
else restAll = str[i];
};
// after iterating over all characters in string-input
// return capsOnly concatenated with restAll
return `${capsOnly}${restAll}`;
};
console.log(capsWithOrder("HeLLoTherE"));
解釋
在上面的代碼段中添加了行內注釋。
沒有所有的解釋:
顯示代碼片段
const capsWithOrder = str => {
let capsOnly = "", restAll = "";
for (let i = 0; i < str.length; i ) {
if (str[i] === str[i].toUpperCase()) capsOnly = str[i];
else restAll = str[i];
};
return `${capsOnly}${restAll}`;
};
console.log(capsWithOrder("HeLLoTherE"));
uj5u.com熱心網友回復:
遵循使用for...of回圈迭代輸入的解決方案。它將輸入拆分為大寫和小寫文字,然后重新合并在一起:
const exampleLiteral = 'HeLLoTherE';
const isUppercase = (literal) => literal === literal.toUpperCase() && literal !== literal.toLowerCase();
const prefixCapitalLetters = (literal) => {
let capitalLetters = '';
let lowerLetters = '';
for (let letter of literal) {
if(isUppercase(letter)) {
capitalLetters = capitalLetters.concat(letter);
continue;
}
lowerLetters = lowerLetters.concat(letter);
};
return capitalLetters lowerLetters;
}
console.log(prefixCapitalLetters(exampleLiteral));
uj5u.com熱心網友回復:
這真的不是一個很難的問題:
function rearrange(str) {
let result = "";
for (let c of str)
if (c >= 'A' && c <= 'Z')
result = c;
for (let c of str)
if (c < 'A' || c > 'Z')
result = c;
return result;
}
console.log(rearrange("Hello World, It Is A Beautiful Morning!"));
查找大寫字符,并將它們添加到結果字串中。然后回去找到其他字符,并在最后添加它們。通過在沒有任何排序的情況下回圈,只需從開始到結束的簡單迭代,就可以保留順序(除了大寫的東西)。
真正困難的部分是想出一種方法來檢測所有 Unicode 中的“大寫”字母。有些語言(嗯,正字法)根本沒有這個概念。JavaScript 有越來越多的方法來處理這個問題,但我懷疑對于 OP 迄今為止可用的課堂材料,鑒于原始問題的性質,這種正則運算式技巧可能不適合答案。
uj5u.com熱心網友回復:
像這樣的東西
const string1 = 'HeLLoTherE'
const transform = string => {
const lower = string.split('').filter(c => c.charCodeAt() > 'a'.charCodeAt())
const upper = string.split('').filter(c => c.charCodeAt() < 'Z'.charCodeAt())
return [...upper, ...lower].join('')
}
console.log(transform(string1))
uj5u.com熱心網友回復:
我認為那一定是作業。
const sort = [
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''),
'abcdefghijklmnopqrstuvwxyz'.split('')
]
function listByValue(string) {
string = [...string];
let ret = [];
for (let i in sort)
ret = [...ret,...string.filter(e=>sort[i].includes(e))];
return ret.join('')
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/463265.html
標籤:javascript
上一篇:如何定位這個i標簽
