2017-02-22 4 views
-1

Hier ist Verfeinerung, was ich bisher habe: https://jsfiddle.net/CRASNY/dms3tvjj/6/mein JavaScript Text Scrambler

function scramble(a){a=a.split("");for(var b=a.length-1;0<b;b--){var c=Math.floor(Math.random()*(b+1));d=a[b];a[b]=a[c];a[c]=d}return a.join("")} 

function scrambleText(){ 
console.log(1); 
var textArea = document.getElementById('TEXTAREA_ID'); 
var lines = textArea.value.split('\n'); 
for(var i = 0;i < lines.length;i++){ 
    lines[i] = scramble(lines[i]).toUpperCase().split('').join(' '); 
} 
textArea.value = lines.join('\n'); 
} 

document.getElementById('BUTTON_ID').onclick = scrambleText; 

Sie können sehen, dass dies die Eingabe nimmt und kriecht, es ändert sich der Fall in Großbuchstaben, und legt einen Raum zwischen jedem Buchstaben . Dies funktioniert jedoch nicht so gut für Strings, die mehrere Wörter lang sind.

Zum Beispiel wird This sentence is a test derzeit zu etwas wie S T E S A I S S E C I E T E T H N T N verschlüsselt.

Was ich erreichen möchte: jedes Wort einer Zeichenfolge wird separat verschlüsselt und durch den Schlüssel ~ verpackt. Ich möchte auch, dass die Eingabe in der Ausgabe angezeigt wird, getrennt durch einen | folgenden verschlüsselten Text. Eine Beispielausgabe von This sentence is a test wäre ~H T S I~ ~E C N T E S N E~ ~S I~ ~A~ ~T T S E~|This sentence is a test. Kann mir irgendjemand sagen, wie ich das machen könnte?

Antwort

1

Sie können eine andere Funktion hinzufügen, die die Worte und kriecht jeder trennt, und dann verbindet sie schließlich den tidle Charakter mit:

function scramblePhrase(_phrase) { 
    var words = _phrase.split(/\s+/); 
    words = words.map(function(_word) { 
     return scramble(_word); 
    }); 
    return words.join('~').toUpperCase(); 
} 
function scramble(a){a=a.split("");for(var b=a.length-1;0<b;b--){var c=Math.floor(Math.random()*(b+1));d=a[b];a[b]=a[c];a[c]=d}return a.join("")} 

Von Ihrer scrambleText() Funktion rufen scramblePhrase() statt scramble().

Hier ist eine modifizierte Version von Ihnen mit der oben anstelle Geige: https://jsfiddle.net/dms3tvjj/8/

0

die Form Ihrer ursprünglichen Implementierung zu halten, werden Sie eine zusätzliche Ebene der Iteration hinzufügen, um die Trennung von Worten für Ihren Fall zu behandeln .

function scrambleText(){ 
    var textArea = document.getElementById('TEXTAREA_ID'); 
    var lines = textArea.value.split('\n'); 

    for (var j = 0; j < lines.length; j++){ 
    var originalLine = lines[j]; 
    var words = lines[j].split(' '); 
    for(var i = 0;i < words.length;i++){ 
     words[i] = '~' + scramble(words[i]).toUpperCase().split('').join(' ') + '~'; 
    } 
    lines[j] = words.join('\n') + '|' + originalLine; 
    } 

    textArea.value = lines.join('\n'); 
} 

berücksichtigen, dass während einer weiteren Ebene in die Iteration wird das Hinzufügen nicht Chaos verursachen, bald weitere Ebene oder mehr grandiose Datenmanipulation in den Behälter hinzugefügt wird schwer zu begreifen, um Code führen. Hier finden Sie die Antwort von techfoobar auf eine mögliche Reorganisationsmöglichkeit für eine bessere Lesbarkeit. Siehe Arbeitsbeispiel hier: https://jsfiddle.net/dms3tvjj/9/