如何將每個大寫和小寫(“I am A Great human”)反轉為(“I ma A Taerg namuh”)?這是我擁有的代碼:
function wordsReverse(str) {
let words = [];
words = str.match(/\S ./g);
let result = "";
for (let i = 0; i < words.length; i ){
result = words[i].split('').reverse().join('') " ";
}
return result;
}
console.log(wordsReverse("I am A Great human"));
// Logs "I ma A taerG namuh"
而不是得到“I ma A taerG namuh”
我正在尋找這個:“我是 Taerg namuh”
uj5u.com熱心網友回復:
一種方法是跟蹤原始單詞中大寫字符的索引,并在反轉單詞時使用這些先前的索引值來大寫字符。
如果索引與以前的大寫字符不匹配,則始終將其回傳為小寫(即使它已經是小寫,這也不會產生影響)。
function wordReverse(str) {
let reversed = [];
let words = str.split(" ");
for (let word of words) {
// Calculate which indices in the word are uppercase,
// storing in an object for faster lookups
let uppercaseIndices = word.split("").reduce((acc, char, i) => {
if (/[A-Z]/.test(char)) {
acc[i] = true;
}
return acc;
}, {});
let newWord = word
.split("")
.reverse()
.map((char, i) => {
if (uppercaseIndices[i]) {
return char.toUpperCase();
} else {
return char.toLowerCase();
}
})
.join("");
reversed.push(newWord);
}
return reversed.join(" ");
}
console.log(wordReverse("I am A Great human"));
uj5u.com熱心網友回復:
function wordsReverse(str) {
let indexes = [];
let words = str.split(" ");
let result = "";
// reverse passed string
words.forEach((e) => {
result = e.split("").reverse().join("") " ";
});
// get indexes of uppercase letters passed in function
str.split("").forEach((e, i) => {
if (e === e.toUpperCase() && e !== " ") {
indexes.push(i);
}
});
// lowercase whole string
result = result.trim().toLowerCase().split("");
// uppercase letters accordingly to indexes we get from index array
result.forEach((e, i) => {
if (indexes.includes(i)) {
result.splice(i, 1, e.toUpperCase());
}
});
return result.join("");
}
console.log(wordsReverse("I am A Great human"));
uj5u.com熱心網友回復:
您可以將字串拆分為單詞并逐個測驗Array#map,也可以將每個單詞拆分為字母并使用Array#map此快速演示中的方法測驗每個字母:
const wordsReverse = str => str.split(' ').map(
word =>
word.split('').reverse()
.map(
(letter, i, arr) =>
arr[arr.length - i - 1].toUpperCase() === arr[arr.length - i - 1] ?
letter.toUpperCase() :
arr[arr.length - i - 1].toLowerCase() === arr[arr.length - i - 1] ?
letter.toLowerCase() :
letter
)
.join('')
)
.join(' ');
console.log(wordsReverse("I am A Great human"));
//OUTPUT: I ma A Taerg namuh
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473550.html
標籤:javascript 数组 正则表达式 细绳 逆转
下一篇:用numpy陣列問題初始化一個類
