Я хочу рандомизировать буквы в словах из моего <textarea>ввода - PullRequest
0 голосов
/ 24 сентября 2019

Я хотел бы знать, как немного изменить слова из моего ввода textarea.Я бы не хотел, чтобы все слова в предложении были зашифрованы, а только (некоторые) буквы в (некоторых) словах.Порядок слов должен быть одинаковым.

Я думал об использовании var string_array = string.split ("");но я не мог найти много документации по этому вопросу, и я не мог найти другие варианты, которые были бы хороши для меня, либо.

У кого-нибудь есть предложения, как это сделать?

<!--Made by MysteriousDuck#5764-->

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" type="text/css" href="style.css">
    <script src="textchanger.js"></script>
    <title>Text changer</title>
</head>

<body>

    <div class="container">

        <h1> Text Changer </h1>
        <h2> CAPS text changer</h2>

        <textarea type="text" autofocus="true" placeholder="input text" id="inputText" value="Input Value"
            spellcheck="false"></textarea>
        <button class="button button1" onclick="myConvertFunction()">Convert</button>
        <textarea type="text" placeholder="CoNvErTeD tExT" id="converted" value="Clear" readonly="true"
            spellcheck="false"></textarea>
        <button class="button button1" onclick="myCopyFunction(); eraseText();">Copy</button>

    </div>
</body>

</html>
/* Made by MysteriousDuck#5764 */

function myConvertFunction() {
    var x = document.getElementById("inputText").value;
    var foo = x.split("");
    var string = "";
    for (i = 0; i < foo.length; i++) {
        if (i % 2 == 0) {
            string += foo[i].toUpperCase();
        } else {
            string += foo[i];
        }
    }

    document.getElementById("converted").value = string;
}

function myCopyFunction() {
    var copyText = document.getElementById("converted");
    copyText.select();
    document.execCommand("copy");
    alert("Copied the text: " + copyText.value);
    eraseText();
}

function eraseText() {
    document.getElementById("converted").value = "";
    document.getElementById("inputText").value = "";
    document.getElementById("inputText").focus();
}

function randomizeLetters() {
    var x = document.getElementById("inputText").value;
}

Ответы [ 3 ]

0 голосов
/ 24 сентября 2019

Вы можете использовать

function scramble(text) {
    let words = text.split(' ');

    words = words.map(word => {
        if (word.length > 2) {
            return word.split('').sort(() => 0.5-Math.random()).join('');
        }

        return word;
    });

    console.log(words);

    return words.join(' ');
}
0 голосов
/ 24 сентября 2019

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

function randomizeString(sentence) {

    const words = sentence.split(' ');
    return words.map(word => {
        const flag = getRandomInt(2);
        return flag ? scrambleWord(word) : word;
    }).join(' ');

    function getRandomInt(max) {
        return Math.floor(Math.random() * Math.floor(max));
    }

    function scrambleWord (word) {
        var scramble = '';
        word = word.split('');
        while (word.length > 0) {
            scramble +=  word.splice(word.length * Math.random() << 0, 1);
        }
        return randomCapitalizeWord(scramble);
    }

    function randomCapitalizeWord(word) {
        return word.split('').map(letter => {
            const flag = getRandomInt(2);
            return flag ? letter.toUpperCase() : letter;
        }).join('');
    }
}
0 голосов
/ 24 сентября 2019

Кажется, вы ищете заглавные буквы других символов.Если это так, то вы можете разделить значение textarea и затем использовать map в массиве.map вернет новый массив.Внутри карты обратного вызова проверьте index персонажа.Если это даже, то преобразовать в верхний регистр.Поскольку map возвращает новый массив, вы можете использовать join для создания новой строки из массива

function myConvertFunction() {
  var x = document.getElementById("inputText").value;
  var foo = x.split("");
  var string = foo.map(function(item, index) {
    if (index % 2 === 0) {
      return item.toUpperCase();
    } else {
      return item;
    }
  })

  document.getElementById("converted").value = string.join('');
}

function myCopyFunction() {
  var copyText = document.getElementById("converted");
  copyText.select();
  document.execCommand("copy");
  alert("Copied the text: " + copyText.value);
  eraseText();
}

function eraseText() {
  document.getElementById("converted").value = "";
  document.getElementById("inputText").value = "";
  document.getElementById("inputText").focus();
}

function randomizeLetters() {
  var x = document.getElementById("inputText").value;
}
<div class="container">

  <h1> Text Changer </h1>
  <h2> CAPS text changer</h2>

  <textarea type="text" autofocus="true" placeholder="input text" id="inputText" value="Input Value" spellcheck="false"></textarea>
  <button class="button button1" onclick="myConvertFunction()">Convert</button>
  <textarea type="text" placeholder="CoNvErTeD tExT" id="converted" value="Clear" readonly="true" spellcheck="false"></textarea>
  <button class="button button1" onclick="myCopyFunction(); eraseText();">Copy</button>

</div>
...