我被要求解决以下问题:
编写一个函数,该函数接收一个或多个单词的字符串,并返回相同的字符串,但所有五个或更多字母单词都反转。传入的字符串只包含字母和空格。只有当存在多个单词时才会包含空格。
我想出了这个解决方案:
function spinWords(input) {
if (input.length < 5) {
return input;
}
let arrayOfWords = input.split(' ');
for (var i = 0; i < arrayOfWords.length; i++) {
let word = arrayOfWords[i];
if (word.length >= 5) {
arrayOfWords[i] = word.split('').reverse().join('');
}
}
return arrayOfWords.join(' ');
}
最初,我以这种方式在for循环中写了if语句的主体(这不起作用):
word = word.split('').reverse().join('')
我很困惑为什么前者正常工作,但后者却没有。任何澄清将非常感激。
答案 0 :(得分:0)
表达式word = word.split('').reverse().join('')
表示每个下一个单词都复制在变量word
中,但未在arrayOfWords
内修改到位。
As arrayOfWords
是初始字词列表,arrayOfWords[i] = word.split('').reverse().join('')
会按预期修改/覆盖每个字词。
此外,这是spinWords
功能的优化版本:
function spinWords(input) {
var input = input.trim();
if (input.length < 5) {
return input;
}
return input.split(' ').map(function(w) {
return (w.length >= 5 && w.split('').reverse().join('')) || w;
}).join(' ');
}
var str = 'what should I do in this world of mysery';
console.log(spinWords(str));
&#13;
答案 1 :(得分:0)
let word = arrayOfWords[i];
所以在这里,单词是从数组中的第i个元素复制的字符串。当你重新分配时
word = word.split('').reverse().join('')
像这样,这只是将单词(你作为字符串创建的新变量)作为反向单词而不是原始数组中的实际元素。我希望它有所帮助。