Генератор опечаток в JavaScript

Я создал этот код для создания опечаток во всех словах на странице. Код смешивает буквы внутри слова, однако оставляет первый и последний символы. Но как мне игнорировать знаки препинания, такие как "." "(" "," ")" действует как первый и/или последний символ?

    for (var i = 0; i < words.length; i++) {
    var word = words[i];
    var letters = word.split("");
    var first = letters[0];
    var last = letters[letters.length - 1];
    for (var j = 1; j < letters.length - 1; j++) {
        var letter = letters[j];
        var index = Math.floor(Math.random() * (letters.length - 2)) + 1;
        var temp = letters[index];
        letters[index] = letter;
        letters[j] = temp;
    }
    letters[0] = first;
    letters[letters.length - 1] = last;
    scrambled += letters.join("") + " ";
}
document.body.innerText = scrambled;

Отвечает ли это на ваш вопрос? Генератор опечаток Javascript

Dave Pritlove 27.11.2022 00:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался ответить на ваши вопросы здесь, используя очень общий код и циклы for, поскольку это похоже на задание. Я избегал es6, кроме как использовать let вместо var, так как глобальные переменные часто могут приводить к незаметным ошибкам.

Одна общая оптимизация заключается в том, что любое слово, состоящее из 3 букв или менее, не будет смешиваться, поэтому вы можете кодировать с учетом этого предположения и избежать ненужной обработки. Более интересная версия этого может допускать опечатки в словах из 2 или 3 букв.

Вообще говоря, ваша первая проблема заключается в том, что вы предполагаете, что позиции 1-й буквы и последней буквы в слове являются константами. Я добавил 2 простые функции для предоставления индекса 1-го или последнего «не пунктуационного» символа. Эти функции очень похожи, просты и не являются DRY, но опять же, я просто хотел предоставить простые примеры на основе циклов.

Теперь, когда вы знаете 1-й и последний непунктуационные индексы в массиве для одного слова, вы можете использовать более сложную функцию случайных чисел, которая будет индексировать только буквы в допустимом диапазоне, таким образом полностью избегая символов 1-го и последнего слова. Эта функция (getRandomInt) была дословно скопирована со страницы Mozilla Math.random(). Часто бывает полезно прочитать подобную страницу для часто используемых фрагментов и примеров.

// javascript
let words = document.getElementById("original").innerText.split(" ")

const punctuation = [',', ';', '.', '"', "'"]

function getFirstLetterPosition(letters) {
    let pos = 0;
    for (let i = 0; i < letters.length; i++) {
      pos = i  
      let isPunctuation = false
      for (let a = 0; a < punctuation.length; a++) {
          if (letters[i] == punctuation[a]) {
              console.info(`letter: ${letters[i]} punct: ${punctuation[a]}`)
              isPunctuation = true
          }
      }
      if (!isPunctuation) {
        break;    
      }  
    }
    return pos
}

function getLastLetterPosition(letters) {
    pos = letters.length - 1;
    for (let i = letters.length -1; i > 0; i--) {
      let pos = i  
      let isPunctuation = false
      for (let a = 0; a < punctuation.length; a++) {
          if (letters[i] == punctuation[a]) {
              isPunctuation = true
          }
      }
      if (!isPunctuation) {
        break;    
      }  
    }
    return pos
}

function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min) + min); // The maximum is exclusive and the minimum is inclusive
}

let scrambled = ""
for (let i = 0; i < words.length; i++) {
    let word = words[i]   
    let letters = word.split("")
    if (letters.length > 3) {
        let firstPos = getFirstLetterPosition(letters)
        
        let lastPos = getLastLetterPosition(letters)
        
        console.info("Before:" + letters)
        for (let j = firstPos + 1; j < lastPos - 1; j++) {
            let letter = letters[j]
            let index = getRandomInt(firstPos + 1, lastPos - 1) 
            let temp = letters[index]
            letters[index] = letter
            letters[j] = temp
        }
        console.info("After:" + letters)
    }
    scrambled += letters.join("") + " ";
    
}
document.getElementById("typos").innerText = scrambled
<!doctype html>
<html>
    <head>
        <title></title>
        <link rel = "stylesheet" href = "index.css">
    </head>
    <body>
        <p id = "original">I "Consulted". The Dictonary, Boy. Calling nothing end fertile for venture way boy. Esteem spirit temper too say adieus who direct esteem. It esteems luckily mr or picture placing drawing no. Apartments frequently or motionless on reasonable projecting expression. Way mrs end gave tall walk fact bed.

Inhabit hearing perhaps on ye do no. It maids decay as there he. Smallest on suitable disposed do although blessing he juvenile in. Society or if excited forbade. Here name off yet she long sold easy whom. Differed oh cheerful procured pleasure securing suitable in. Hold rich on an he oh fine. Chapter ability shyness article welcome be do on service.

Cause dried no solid no an small so still widen. Ten weather evident smiling bed against she examine its. Rendered far opinions two yet moderate sex striking. Sufficient motionless compliment by stimulated assistance at. Convinced resolving extensive agreeable in it on as remainder. Cordially say affection met who propriety him. Are man she towards private weather pleased. In more part he lose need so want rank no. At bringing or he sensible pleasure. Prevent he parlors do waiting be females an message society.</p>
        <p id = "typos"></p>
        <script src = "index.js"></script>
    </body>
</html>

Другие вопросы по теме