El script tiene que funcionar de esta manera:
isJumping(9) === 'JUMPING'Este es un número de un dígito
isJumping(79) === 'NOT JUMPING'Los dígitos vecinos no difieren en 1
isJumping(23454) === 'JUMPING'Los dígitos vecinos difieren en 1
Tengo:
function isJumping(number) { let str = number.toString(); for (let i = 1; i < str.length; i++) { if (Math.abs(str[i+1]) - Math.abs(str[i]) == 1){ return 'JUMPING'; } } return 'NOT JUMPING'; } console.log(isJumping(345));Ayuda por favor, ¿dónde está el error?
Hay un par de problemas:
1 entre dígitos, pero no sabe que las diferencias posteriores también serán 1 .Math.abs como un medio para convertir dígitos en números.En cambio (ver comentarios):
function isJumping(number) { let str = number.toString(); for (let i = 1; i < str.length; i++) { // Convert to number, do the difference, then // use Math.abs to make -1 into 1 if necessary if (Math.abs(+str[i] - str[i-1]) !== 1) { // Found a difference != 1, so we're not jumping return "NOT JUMPING"; } } // Never found a difference != 1, so we're jumping return "JUMPING"; } console.log(isJumping(345)); // JUMPING console.log(isJumping(9)); // JUMPING console.log(isJumping(79)); // NOT JUMPING console.log(isJumping(23454)); // JUMPING En eso, uso +str[i] para convertir str[i] en número e implícitamente convertir str[i-1] en número a través del operador - , pero hay muchas formas de convertir cadenas en números (las enumero aquí ), elija el que tenga sentido para su caso de uso.
Es posible que también deba permitir números negativos ( isJumping(-23) ).
Recorra los caracteres y regrese temprano con "NOT JUMPING" si se viola la condición y si la condición nunca se viola, devuelva "JUMPING" .
function isJumping(num) { const strNum = String(Math.abs(num)); for (let i = 0; i < strNum.length - 1; i++) { if (Math.abs(strNum[i] - strNum[i + 1]) > 1) { // replace `> 1` with `!== 1`, if diff 0 is not valid! return "NOT JUMPING"; } } return "JUMPING"; } console.log(isJumping(9)); console.log(isJumping(79)); console.log(isJumping(23454));Una forma torpe sería
if (Math.abs(Math.abs(str[i+1]) - Math.abs(str[i])) == 1). En este momento, está utilizandoMath.abs()para convertir dígitos en números. Además, la indexación está desactivada, comienza desde 1, lo cual es bueno, pero luego debe comparar[i]y[i-1]. Y el desajuste habitual: puedes decir "JUMPING", solo al final. Por lo tanto, debe verificar!==1y devolver "NO SALTAR" dentro del ciclo y "JUMPING" después. Eso también manejaría el caso de 1 dígito.
Es una práctica más legible usar parseInt() para hacer un número a partir de un dígito, de lo contrario, la implementación del comentario:
function isJumping(number) { let str = number.toString(); for (let i = 1; i < str.length; i++) { if (Math.abs(parseInt(str[i-1]) - parseInt(str[i])) !== 1){ return 'NOT JUMPING'; } } return 'JUMPING'; } console.log(isJumping(345)); console.log(isJumping(3)); console.log(isJumping(79));