Tengo este fragmento de código que agrega algunos espacios en una palabra/frase como esta:
"I drove everywhere by car" > "I d_o_e e_e_y_h_r_ _y c_r_"¿Cómo se puede transformar para que tenga un resultado un poco diferente?
"I drove everywhere by car" > "I d___e e___y___r_ b_ c__"La diferencia es que mostraría la primera letra de cada palabra, luego haría un espacio de 3 letras y, si la palabra es lo suficientemente larga, mostraría la quinta letra, otro espacio de 3 letras y así sucesivamente.
La pieza de código:
var str = document.getElementById("dropped-v").innerHTML; letters = ''; for (var i = 0, len = str.length; i < len; i++) { if (i % 2 != 0 && str[i] != ' ') { letters += '<span class="hint">_</span>'; } else { letters += str[i]; } } document.getElementById("dropped-v").innerHTML = letters;Aquí hay una forma de hacerlo para oraciones simples sin puntos. Puede agregar soporte de período e inyección de HTML según sea necesario.
let MASK = '_'; function obfuscate_word(word) { const letters = [...word]; const mask_letters = letters.map((letter, i) => i % 4 == 0 ? letter : MASK); return mask_letters.join(''); } function obfuscate_sentence(sentence) { const words = sentence.split(' '); const mask_words = words.map(word => obfuscate_word(word)); return mask_words.join(' '); } const s = "I drove everywhere by car" console.log(s); console.log(obfuscate_sentence(s));Si lo desea, puede reemplazar la MÁSCARA y obtener/establecer su HTML algo como esto:
MASK = '<span class="hint">_</span>'; const e = document.getElementById("dropped-v"); e.innerHTML = obfuscate_sentence(e.innerHTML); Esto supone que el HTML interno del elemento dropped-v es una oración simple (y no una oración ofuscada previamente que incluye marcado, por ejemplo).