2017-02-20 4 views
0
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("")} 

У меня этот код, который, кажется, чтобы быть эффективным в скремблирования ни одного слова, вызвав тревогу:Создание JavaScript строка/слово скремблер

alert(scramble('Like this.')); 

Вот что я пытаюсь сделать хотя: я хочу иметь возможность вводить текст в текстовое поле, разделенное символами новой строки, и случайным образом скремблировать каждую строку по строкам. Например:

testing 
scramble 
words 

выведет что-то вроде:

sgnitte 
rceamslb 
dwros 

Может кто-нибудь помочь мне в этом?

ответ

1

Попробуйте этот код:

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

Сначала вы получите элемент текстовой области, то вы получите его значение и разделить, что в массив построчно. Затем вы можете скремблировать каждую строку с помощью существующей функции. Наконец, все, что нужно сделать, - это преобразовать массив обратно в строку и вернуть скремблированный текст в текстовую область.

EDIT: вы можете использовать метод toUpperCase для преобразования всех символов в верхний регистр. Комбинация splitjoin, как вы можете видеть в приведенном выше коде, может использоваться для добавления пробелов между символами.

JSFiddle: https://jsfiddle.net/NotABlueWhale/u8wjuz1r/7/

+0

Это работало отлично. Вы очень быстро. Кроме того, знаете ли вы, как я делаю это так, чтобы он преобразовывал все в прописные буквы и помещал пробел между каждой конвертируемой буквой? Пример входных данных: тестирование скремблирования слова Пример вывода: S G N I Т Т Е R C E A M S L B Д З Ч О С – Craig

+0

Конечно. Я обновил свой ответ, чтобы отразить эти изменения. – NotABlueWhale

+0

@ Kinduser Ты лучший. Благодаря! – Craig

0

function shuffle(str) { 
 
    var str = document.getElementById('txt'); 
 
    var a = str.innerHTML; 
 
    var newArr = []; 
 
    var neww = ''; 
 
    var text = a.replace(/[\r\n]/g, '').split(' '); 
 
    
 
    text.map(function(v) { 
 
    v.split('').map(function() { 
 
     var hash = Math.floor(Math.random() * v.length); 
 
     neww += v[hash]; 
 
     v = v.replace(v.charAt(hash), ''); 
 
    }); 
 
    newArr.push(neww); 
 
    neww = ''; 
 
    }); 
 
    var x = newArr.map(v => v.split('').join(' ')).join('\n'); 
 
    str.value = x.split('').map(v => v.toUpperCase()).join(''); 
 
}
<textarea cols='60' rows='8' id="txt">testing &#13;&#10;scramble &#13;&#10;words</textarea> 
 
<button onclick='shuffle()'>Shuffle</button>