Estoy tomando una matriz y necesito devolver el valor del índice donde los números comienzan a aumentar o disminuir. Los números en la matriz aumentan y luego disminuyen [1, 3, 6, 4, 3] (salida = 2) disminuyen y luego aumentan [6, 4, 10, 12, 19] (salida = 1) o la misma secuencia [1 , 3, 5, 7, 9] (salida = -1). Por ahora, solo estoy enfocado en devolver el índice de una matriz que aumenta y luego disminuye, luego creo que puedo resolver las otras condiciones.
function ArrayChallenge(arr){ for(let i = 0; i < arr.length; i++){ if(arr[i]>arr[i+1]){ console.log(arr.indexOf(arr[i]>arr[i+1])) } } } console.log(ArrayChallenge([1, 2, 4, 5, 7, 3])) Para mí, el código dice, tome el argumento para el parámetro ( arr ), luego el bucle for pasará por cada índice y comparará i con i+1 , si i es mayor que i+1 , eso significa que la secuencia está disminuyendo. Si ese es el caso, me gustaría registrar en la consola el índice donde eso realmente está sucediendo. Para mi código de ejemplo anterior, la salida debe ser 5 porque ese es el índice donde los números comienzan a disminuir, pero obtengo -1, lo que significa que no se puede encontrar el elemento. Si alguien sabe dónde me estoy equivocando y me puede indicar la dirección correcta, sería genial, estoy bastante seguro de que estoy usando el método .indexOf incorrectamente, pero no sé por qué.
"arr[i]>arr[i+1]" devuelve un bool "verdadero". Su matriz no contiene ningún valor booleano, por lo que no hay un índice coincidente para ella. Por lo tanto, devuelve -1 porque no puede encontrar ningún elemento coincidente.
EDITAR:
Si desea imprimir el "momento" en que sus valores están disminuyendo, puede intentar algo como esto:
console.log('Decreasing from index: ' + arr.indexOf(arr[i]) + ' to ' + arr.indexOf(arr[i + 1]))Utilice return arr[i] en lugar de console.log(arr.indexOf(arr[i]>arr[i+1]))
function ArrayChallenge(arr){ for(let i = 0; i < arr.length; i++){ if(arr[i]>arr[i+1]){ return arr[i] } } } console.log(ArrayChallenge([1, 2, 4, 5, 7, 3])) output: 7Puede usar el concepto ES6 Classes para lograr el requisito que tiene.
Demostración de trabajo:
// Defining class using es6 class arrayChallenge { constructor(input_array) { this.input_array = input_array; } getIncreaseThenDecrease() { for(let i = 0; i < this.input_array.length; i++) { if(this.input_array[i]>this.input_array[i+1]) { return this.input_array.indexOf(this.input_array[i]) } } } getdecreaseThenIncrease() { for(let i = 0; i < this.input_array.length; i++) { if(this.input_array[i] < this.input_array[i+1]) { return this.input_array.indexOf(this.input_array[i]) } } } } // Making object with the help of the constructor let arrayChallengeObject = new arrayChallenge([1, 2, 4, 5, 7, 3]); console.log(arrayChallengeObject.getIncreaseThenDecrease()); console.log(arrayChallengeObject.getdecreaseThenIncrease());