Me gustaría saber cómo cambiar un poco las palabras de mi entrada de área de texto. No quisiera que todas las palabras en la oración sean codificadas, sino solo (algunas) de las letras en (algunas) de las palabras. El orden de las palabras tiene que ser el mismo.

Estaba pensando en usar var string_array = string.split (""); pero no pude encontrar mucha documentación sobre esto y tampoco pude encontrar ninguna otra opción que fuera buena para mí.

¿Alguien tiene sugerencias sobre cómo hacer esto?

<!--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;
}
0
MysteriousDuck 24 sep. 2019 a las 18:05

3 respuestas

La mejor respuesta

Puede usar

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
Sonjoy Samadder 24 sep. 2019 a las 15:23

Parece que estás buscando capitalizar personajes alternativos. Si ese es el caso, puede dividir el valor de textarea y luego usar map en la matriz. map devolverá una nueva matriz. La devolución de llamada del mapa interior verifica el index del personaje. Si es par, entonces conviértalo a mayúsculas. Dado que map devuelve una nueva matriz, puede usar join para crear una nueva cadena a partir de la matriz

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>
0
brk 24 sep. 2019 a las 15:19

La siguiente función toma una cadena como argumento. Revuelve cualquier palabra en esa cadena al azar. También escribe en mayúscula cualquier letra de la palabra al azar

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
Abito Prakash 24 sep. 2019 a las 15:49