Sé que hay como soluciones de 8 líneas para convertir números enteros a binario, pero estoy intentando crear un pequeño programa que haga lo mismo con matrices. Estoy usando 3 matrices, la primera almacena el número original que se convertirá y todos los valores de dividir ese número por 2 y luego redondear hacia abajo cuando hay un resto, también conocido como [122, 61, 61, 30.5, 30, 15.5, 15 , etc. etc.], y la segunda matriz almacenará los dígitos binarios en función de si el resto de la división es verdadero || falso, también conocido como [0,1,0,1,1,1,1]. Todavía no está escrito, pero al final tomaré el binaryArray y lo invertiré y lo pondré en una cadena para obtener 1111010, el binario correcto para 211.
Obviamente, estoy haciendo más de una cosa mal, pero me estoy acercando, ya que puedo ver los resultados iniciales correctos cuando hago console.log en la función principal. Cualquier ayuda aquí es apreciada, excepto que no necesito saber cómo hacer todo este concepto más fácil, ya que ya he estudiado las soluciones más fáciles y estoy intentando esto a propósito para practicar.
Ejecute el fragmento de código para ver que el resultado está cerca de la solución, pero obviamente lastNumArray no se está actualizando y todo no está en bucle.
let num = 122; let array = [num]; let binaryArray = []; let lastNumArray = array[array.length - 1]; function convertToBinary(number) { let lastNumArray = number; var result = (number - Math.floor(number)) !== 0; if (result) { binaryArray.push('1') && array.push(lastNumArray / 2) && array.push(Math.floor(array[array.length - 1])) } else { binaryArray.push('0') && array.push(lastNumArray / 2) && //this pushes 61 array.push(Math.floor(array[array.length - 1])) } } while (array > 1) { convertToBinary(lastNumArray) && lastNumArray.push(array[array.length - 1]) } console.log(array) console.log(binaryArray) console.log(lastNumArray)Cualquier ayuda o sugerencia aquí sería muy apreciada. Probé bucles for, do while y más, y me estoy acercando, pero realmente quiero saber qué estoy haciendo mal aquí para poder aprender. Esta es la primera pequeña función que he intentado escribir solo, ¡y definitivamente me mantiene humilde!
Podrías intentar algo así con una llamada recursiva.
let results = [] let binary = [] function cb(number) { if (number === 0) return results.push(number) results.push(number / 2) results.push(Math.floor(number / 2)) const last_index = results.length - 1 if (results[last_index] === results[last_index - 1]) { binary.push("0") } else { binary.push("1") } cb(results[last_index]) } cb(122) console.log(results) console.log(binary) console.log(binary.reverse().join(""))