Tal como dice el título: estoy tratando de encontrar el primer número vacío (faltante) (agujero) en una matriz usando for-loop o , si la matriz es secuencial y comienza del 1 al 7, por ejemplo, necesitaré el siguiente entero después del último elemento de la matriz, en este caso 8.
Solo necesita un agujero por iteración completa que devuelva el valor encontrado.
Mi lógica está bien cuando se trata de la primera condición (matriz que comienza con un valor superior a 1), pero de las siguientes condiciones, la última siempre se selecciona.
En una palabra:
const numbers = [1, 2, 3, 4, 6, 7]; document.getElementById("demo").innerHTML = numbers; let hole; holeFinder() function holeFinder() { for (let i = 0; i < numbers.length; i++) { if (numbers[0] > 1) { /* console.log(numbers[0]) */ hole = 1; document.getElementById("demo").innerHTML += "<br>1: hole: " + hole; return hole; } if (numbers[i] > 1) { if ((numbers[i] - numbers[i - 1]) > 1) { hole = (numbers[i - 1] + 1) document.getElementById("demo").innerHTML += "<br>2: hole: " + hole; return hole; } if ((numbers[i] - numbers[i - 1]) == 1) { hole = numbers[numbers.length - 1] + 1; document.getElementById("demo").innerHTML += "<br>3: hole: " + hole; return hole; } } } } <h2>for loop method for finding non-sequential slots (holes) in an array</h2> <p id="demo"></p>¿Qué tiene de malo mi lógica?
puedes hacer algo como esto
const arr1 = [1, 2, 3, 4, 6, 7] const arr2 = [1, 2, 4, 5, 6, 7] const arr3 = [1, 2, 3, 4, 5, 6, 7] const findHole = arr => { for(let i = 0; i < arr.length; i++){ if(arr[i] !== i + 1){ return i + 1 } } return arr.length + 1 } console.log(findHole(arr1)) console.log(findHole(arr2)) console.log(findHole(arr3))También puede usar un bucle while y encontrar el número que falta para romper el bucle.
const one = [2, 3, 4, 5, 6, 7]; const two = [1, 2, 3, 4, 6, 7]; const three = [1, 2, 3, 4, 5, 6, 7]; function findHole(numbers) { let count = 0; let hole = null; while (!hole) { count++ const number = count; // if the array does not contain number, assign the number // as the missing hole number if (!numbers.includes(number)) { hole = number; } } return hole; } document.getElementById("demo").innerHTML += "1: hole: " + findHole(one) + '<br>'; document.getElementById("demo").innerHTML += "2: hole: " + findHole(two) + '<br>'; document.getElementById("demo").innerHTML += "3: hole: " + findHole(three) + '<br>'; <div id="demo"></div>Ingresas la segunda parte de la segunda declaración if
if ((numbers[i] - numbers[i - 1]) == 1) { hole = numbers[numbers.length - 1] + 1; document.getElementById("demo").innerHTML += "<br>3: hole: " + hole; return hole; }en la segunda iteración del bucle, siempre que no encuentre el agujero en el primer índice, siempre devolverá el último elemento de la matriz aumentado en uno. Debe verificar esta condición solo en el último elemento de su matriz.