• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

241
Views
¿Alternativa de la función Array.index() de Python en JavaScript que trata los índices negativos de la misma manera que Array.index() de Python?

TLDR: ¿Existe alguna alternativa del método Array.index() de Python en JavaScript que trate los índices negativos de la misma manera que Array.index() de Python?


Para el fondo, estoy escribiendo un código para el cifrado César (enlace de Wikipedia).

He escrito el siguiente código en Python:

 alphabet = list('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz') # list('abc') == ['a', 'b', 'c'] def caesar(text, shift, direction): endText = '' if direction == 'encode': shift = shift else: shift *= -1 for i in text: oldIndex = alphabet.index(i) newIndex = oldIndex + shift newLetter = alphabet[newIndex] endText += newLetter print(endText) caesar('zeus', 5, 'encode') # 'ejzx' caesar('ejzx', 5, 'decode') # 'zeus'

Cuando ingreso una palabra que tiene letras que están hacia el final del alfabeto inglés (es decir, que contiene letras como v, w, x, y, z, etc.), codifica la palabra y cuando decodifico el resultado, da la palabra Codifiqué previamente sin ningún error.

Cuando escribo exactamente el mismo código en JavaScript, y cuando codifico el mismo mensaje que usé en el código de Python ('zeus'), me da ejzx ; sin embargo, cuando decodifico ejzx , me da undefinedeus en lugar de zeus , es decir, decodifica eus , pero no la z inicial.

JavaScript:

 let alphabet = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'.split(''); function caesar(text, shift, direction) { let endText = ''; if (direction == 'encode') { shift = shift; } else if (direction == 'decode') { shift *= -1; } for (let i of text) { let oldIndex = alphabet.indexOf(i); let newIndex = oldIndex + shift; let newLetter = alphabet[newIndex]; endText += newLetter; } console.log(endText) } caesar('zeus', 5, 'encode') // 'ejzx' caesar('ejzx', 5, 'decode') // 'undefinedeus'

Intenté reemplazar indexOf() con Array.at() (enlace MDN), pero devuelve undefinedundefinedundefinedundefined tanto en la codificación como en la decodificación.

¿Cómo podría arreglar el código para que funcione igual que Python?

about 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

No tiene que reemplazar indexOf() con Array.prototype.at(), en lugar de eso, debe reemplazar alphabet[newIndex] por alphabet.at(newIndex);

 let alphabet = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'.split(''); function caesar(text, shift, direction) { let endText = ''; if (direction == 'encode') { shift = shift; } else if (direction == 'decode') { shift *= -1; } for (let i of text) { let oldIndex = alphabet.indexOf(i); let newIndex = oldIndex + shift; let newLetter = alphabet.at(newIndex); endText += newLetter; } console.log(endText) }

Espero que esto ayude.

about 3 years ago · Juan Pablo Isaza Report

0

No sé pyton, pero en javascript el índice siempre comienza desde 0.
De esta manera, en su ejemplo, para codificar la letra "z" (índice: 25, posición: 26), agrega 5 al índice y devuelve la letra "e" (índice: 30, posición: 31), entonces hasta ahora todo bien. Para decodificar la letra "e", javascript la encuentra en el índice 4 (posición 5) y al restarle 5 resulta que el índice que busca para la nueva letra es -1 y como ese índice no existe, devuelve indefinido . Para evitar esto, cuando decodifique, agregue 26 al "cambio" (un alfabeto) para que use el segundo conjunto de caracteres de la variable del alfabeto, y como siempre irá hacia atrás (restar), siempre encontrará el correspondiente personaje.

 let alphabet = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'.split(''); function caesar(text, shift, direction) { let endText = ''; if (direction == 'encode') { shift = shift; } else if (direction == 'decode') { shift = (shift * -1) + 26; } for (let i of text) { let oldIndex = alphabet.indexOf(i); let newIndex = oldIndex + shift; let newLetter = alphabet[newIndex]; endText += newLetter; } console.log(endText) } caesar('zeus', 5, 'encode') // 'ejzx' caesar('ejzx', 5, 'decode') // 'zeus'

about 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error