Estoy trabajando en un programa que, antes de que pueda hacer cualquier otra cosa, debe poder convertir números en otros números. El programa solo funciona con números del 0 al 11 (que representan notas musicales), por lo que cualquier valor mayor o menor debe convertirse en un número entre 0 y 11. Pero cuando ejecuto mi función, devuelve indefinido para muchos números.
const TET = 12; const Notes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; function NoteConverter(note) { const doubled = TET * 2; const tripled = TET * 3; for (index in Notes) { if (note == index) { return index; } else if (note == index + TET || note == index - TET) { return index; } else if (note == index + doubled || note == index - doubled) { return index; } else if (note == index + tripled || note == index - tripled) { return index; } } }Cuando ejecuto la función usando 15 como el número a convertir, obtengo indefinido en lugar de 3, al que debería convertirse.
He estado tratando de averiguar qué estoy haciendo mal, pero no puedo. ¿Alguna ayuda?
Concatenará una cadena para index + TET , por lo que, por ejemplo, si el índice es 0 index + TET será 012 , sucede porque typeof index es string y también es una cadena porque la palabra clave in también funciona para objetos, por lo que devolvería el nombre clave para el objeto que es No siempre es un número.
editar: así que tienes que ir con las notas como se sugiere en la otra respuesta o asegurarte de que se convierta primero en número;)
Simplemente reemplace con de
const TET = 12; const Notes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; function NoteConverter(note) { const doubled = TET * 2; const tripled = TET * 3; for (index of Notes) { if (note == index) { return index; } else if (note == index + TET || note == index - TET) { return index; } else if (note == index + doubled || note == index - doubled) { return index; } else if (note == index + tripled || note == index - tripled) { return index; } } } console.log(NoteConverter(15))