2017-01-26 4 views
1

Ich werde gebeten, das folgende Problem zu lösen:Warum wird Array-Element nicht mit diesem JavaScript-Code überschrieben?

Schreiben Sie eine Funktion, die eine Zeichenfolge aus einem oder mehreren Wörtern übernimmt und die gleiche Zeichenfolge zurückgibt, aber mit allen fünf oder mehr Buchstaben Wörter umgekehrt. Strings werden nur aus Buchstaben und Leerzeichen bestehen. Leerzeichen werden nur enthalten, wenn mehr als ein Wort vorhanden ist.

Ich habe mit dieser Lösung kommen:

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

Anfangs hatte ich den Körper der if-Anweisung in der for-Schleife diese Weise geschrieben (was nicht funktioniert):

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

Ich bin verwirrt, warum ersteres richtig funktioniert, aber letzteres nicht. Jede Klärung wäre sehr willkommen.

Antwort

0

Der Ausdruck word = word.split('').reverse().join('') bedeutet, dass jeder nächste Wort in der Variablen word kopiert wird, wird aber nicht anstelle innerhalb arrayOfWords modifiziert.
Da arrayOfWords die Liste der ursprünglichen Wörter ist, ändert/überschreibt arrayOfWords[i] = word.split('').reverse().join('') jedes Wort wie erwartet.


Außerdem ist hier eine optimierte Version von spinWords Funktion:

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]; 

Also hier ist die Wortfolge aus dem i-ten Elemente in dem Array kopiert. Wenn Sie

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

wie folgt neu zuzuweisen, macht dies nur das Wort (neue Variable, die Sie als String aus) als umgekehrt Wort nicht das eigentliche Element in der ursprünglichen Anordnung. Ich hoffe, es hilft.

Verwandte Themen