为什么不用这个JavaScript代码覆盖数组元素?

时间:2017-01-26 06:17:29

标签: javascript arrays string

我被要求解决以下问题:

编写一个函数,该函数接收一个或多个单词的字符串,并返回相同的字符串,但所有五个或更多字母单词都反转。传入的字符串只包含字母和空格。只有当存在多个单词时才会包含空格。

我想出了这个解决方案:

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('')

我很困惑为什么前者正常工作,但后者却没有。任何澄清将非常感激。

2 个答案:

答案 0 :(得分:0)

表达式word = word.split('').reverse().join('')表示每个下一个单词都复制在变量word中,但未在arrayOfWords内修改到位
As arrayOfWords是初始字词列表,arrayOfWords[i] = word.split('').reverse().join('')会按预期修改/覆盖每个字词。

此外,这是spinWords功能的优化版本:

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

let word = arrayOfWords[i];

所以在这里,单词是从数组中的第i个元素复制的字符串。当你重新分配时

word = word.split('').reverse().join('')
像这样,这只是将单词(你作为字符串创建的新变量)作为反向单词而不是原始数组中的实际元素。我希望它有所帮助。