Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

353
Visualizações
¿Cómo revertir una cadena que contiene emojis complicados?

Aporte:

 Hello world👩‍🦰👩‍👩‍👦‍👦

Salida deseada:

 👩‍👩‍👦‍👦👩‍🦰dlrow olleH

Intenté varios enfoques pero ninguno me dio la respuesta correcta.

Esto fracasó miserablemente:

 const text = 'Hello world👩‍🦰👩‍👩‍👦‍👦'; const reversed = text.split('').reverse().join(''); console.log(reversed);

Esto funciona un poco, pero se divide 👩‍👩‍👦‍👦 en 4 emojis diferentes:

 const text = 'Hello world👩‍🦰👩‍👩‍👦‍👦'; const reversed = [...text].reverse().join(''); console.log(reversed);

También probé todas las respuestas en esta pregunta, pero ninguna funciona.

¿Hay alguna manera de obtener el resultado deseado?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Si puede, use la función _.split() proporcionada por lodash . Desde la versión 4.0 en adelante, _.split() es capaz de dividir emojis Unicode.

El uso de .reverse().join('') nativo para invertir los 'caracteres' debería funcionar bien con emojis que contienen ensambladores de ancho cero

 function reverse(txt) { return _.split(txt, '').reverse().join(''); } const text = 'Hello world👩‍🦰👩‍👩‍👦‍👦'; console.log(reverse(text));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

over 4 years ago · Santiago Trujillo Relatório

0

Tomé la idea de TKoL de usar el carácter \u200d y lo usé para intentar crear un script más pequeño.

Nota: No todas las composiciones usan una unión de ancho cero, por lo que habrá errores con otros caracteres de la composición.

Utiliza el bucle for tradicional porque nos saltamos algunas iteraciones en caso de que encontremos emoticones combinados. Dentro del bucle for hay un bucle while para comprobar si hay un carácter \u200d siguiente. Siempre que haya uno, agregamos los siguientes 2 caracteres también y reenviamos el bucle for con 2 iteraciones para que los emoticones combinados no se inviertan.

Para usarlo fácilmente en cualquier cadena, lo hice como una nueva función prototipo en el objeto de cadena.

 String.prototype.reverse = function() { let textArray = [...this]; let reverseString = ""; for (let i = 0; i < textArray.length; i++) { let char = textArray[i]; while (textArray[i + 1] === '\u200d') { char += textArray[i + 1] + textArray[i + 2]; i = i + 2; } reverseString = char + reverseString; } return reverseString; } const text = "Hello world👩‍🦰👩‍👩‍👦‍👦"; console.log(text.reverse()); //Fun fact, you can chain them to double reverse :) //console.log(text.reverse().reverse());

over 4 years ago · Santiago Trujillo Relatório

0

Invertir el texto Unicode es complicado por muchas razones.

Primero, dependiendo del lenguaje de programación, las cadenas se representan de diferentes maneras, ya sea como una lista de bytes, una lista de unidades de código UTF-16 (16 bits de ancho, a menudo llamados "caracteres" en la API) o como puntos de código ucs4. (4 bytes de ancho).

En segundo lugar, diferentes API reflejan esa representación interna en diferentes grados. Algunos trabajan en la abstracción de bytes, algunos en caracteres UTF-16, algunos en puntos de código. Cuando la representación usa bytes o caracteres UTF-16, generalmente hay partes de la API que le dan acceso a los elementos de esta representación, así como partes que realizan la lógica necesaria para obtener de bytes (a través de UTF-8) o de Caracteres UTF-16 a los puntos de código reales.

A menudo, las partes de la API que ejecutan esa lógica y, por lo tanto, le brindan acceso a los puntos de código se agregaron más tarde, ya que primero había 7 bits ASCII, luego, un poco más tarde, todos pensaron que 8 bits eran suficientes, usando diferentes páginas de códigos, e incluso luego que 16 bits eran suficientes para Unicode. La noción de puntos de código como números enteros sin un límite superior fijo se agregó históricamente como la cuarta longitud de carácter común para codificar lógicamente el texto.

Usar una API que le da acceso a los puntos de código reales parece que eso es todo. Pero...

En tercer lugar, hay muchos puntos de código modificadores que afectan al siguiente punto de código oa los siguientes puntos de código. Por ejemplo, hay un modificador diacrítico que convierte una a siguiente en una ä, e en ë, &c. Da la vuelta a los puntos de código y aë se convierte en eä, formada por letras diferentes. Hay una representación directa de, por ejemplo, ä como su propio punto de código, pero usar el modificador es igual de válido.

Cuarto, todo está en flujo constante. También hay muchos modificadores entre los emoji, como se usa en el ejemplo, y cada año se agregan más. Por lo tanto, si una API le brinda acceso a la información sobre si un punto de código es un modificador, la versión de la API determinará si ya conoce un nuevo modificador específico.

Sin embargo, Unicode proporciona un truco para hackear cuando se trata solo de la apariencia visual:

Hay modificadores de dirección de escritura. En el caso del ejemplo, se utiliza la dirección de escritura de izquierda a derecha. Simplemente agregue un modificador de dirección de escritura de derecha a izquierda al comienzo del texto y, según la versión de la API / navegador, se verá correctamente invertido 😎

'\u202e' se llama anulación de derecha a izquierda, es la versión más fuerte del marcador de derecha a izquierda.

Ver esta explicación por w3.org

 const text = 'Hello world👩‍🦰👩‍👩‍👦‍👦' console.log('\u202e' + text) 

 const text = 'Hello world👩‍🦰👩‍👩‍👦‍👦' let original = document.getElementById('original') original.appendChild(document.createTextNode(text)) let result = document.getElementById('result') result.appendChild(document.createTextNode('\u202e' + text))
 body { font-family: sans-serif }
 <p id="original"></p> <p id="result"></p>

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda