Esta función necesita encontrar la primera aparición de números consecutivos cuya suma sea igual a 10 y devolverlos como una matriz. Mi idea era seguir sumando los números hasta que el acumulador, en este caso x se vuelve mayor que 10, momento en el que el valor de x se restablece a cero, y i se restablece al índice 1, al ser asignado a la variable ct que se supone que crece en uno en cada reinicio, por lo que el ciclo retrocederá y comenzará en el siguiente elemento, hasta que obtenga el valor correcto. Pero por alguna razón, ct está atascado en 1 y no crece y el ciclo no pasa del segundo elemento de la matriz en el índice 1. ¿Hay un error en la lógica o en la implementación?
Advertencia: este código puede hacer que la página se bloquee o deje de responder
const arr = [2, 3, 1, 2, 7, 2, 5, 4, 5, 1, 2, 1]; function test(arr) { let x = 0; for (let i = 0; i < arr.length; i++) { let ct = 0; x = x + arr[i] if (x > 10) { x = 0; i = ct; ct++ } console.log(x) } } console.log(test(arr))El problema es que ha definido ct en el lugar equivocado. Está dentro del bucle, lo que significa que cada vez que llega a un punto en el que i = ct , i se restablece a 0 y ct++ no tiene ningún efecto (porque cada iteración, ct se restablece a 0 ). Debe definir ct en el mismo ámbito que x :
const arr = [2, 3, 1, 2, 7, 2, 5, 4, 5, 1, 2, 1]; function test(arr) { let x = 0; let ct = 0; for (let i = 0; i < arr.length; i++) { x = x + arr[i]; if (x > 10) { x = 0; i = ct; ct++; } console.log(x); } } test(arr);También he completado el resto de la lógica de la función por si lo desea:
const arr = [2, 3, 1, 2, 7, 2, 5, 4, 5, 1, 2, 1]; function test(arr) { let x = 0; let ct = 0; let result = []; for (let i = 0; i < arr.length; i++) { x = x + arr[i]; if (x > 10) { x = 0; i = ct; ct++; } if (x == 10) { result = arr.slice(ct, i + 1); return result; } console.log(x); } return result; } console.log(test(arr));