2017-01-26 9 views
1

配列要素がこのJavaScriptコードで上書きされないのはなぜですか?

1つ以上の単語の文字列を受け取り、同じ文字列を返しますが、5つ以上の文字の単語をすべて逆にする関数を作成します。渡される文字列は、文字とスペースのみで構成されます。スペースは、複数の単語が存在する場合にのみ含まれます。

すると、私はこのソリューションを作ってみた:最初

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文の本体を書いた:

前者が正しく機能する理由は混乱していますが、後者は正しくありません。どんな説明も大いに評価されます。

答えて

0

発現word = word.split('').reverse().join('')は、それぞれ次のワードが可変wordにコピーされるが、arrayOfWords内の適所にが変更されないことを意味します。
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));

0
let word = arrayOfWords[i]; 

ここでは、単語は、アレイ内のi番目の要素からコピーされた文字列です。あなたはこのような

word = word.split('').reverse().join('') 

を再割り当てすると、これはちょうど逆に言葉ではない元の配列の実際の要素として単語(文字列として作られた新しい変数)を行います。私はそれが助けて欲しい

関連する問題