He mirado alrededor y no he encontrado ninguna respuesta para esto. El problema parece bastante simple al principio.
Digamos que tenemos una matriz como esta. Podemos suponer que la matriz SIEMPRE tendrá algo igual por lo que cuenta (cada elemento tiene la misma diferencia entre los elementos adyacentes).
[1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0] La respuesta a lo anterior sería 0.1 .
Otro ejemplo podría ser una matriz como esta.
[0.2,0.4,0.6,0.8,1.0,1.2,1.4] Esta respuesta sería 0.2
Una posible solución es que podría leer el primer y segundo parámetro de la matriz y capturar la diferencia y ese será mi 'paso'. ¿Es esta la mejor manera de hacer esto? ¿Hay alguna desventaja en este enfoque?
si la matriz estuviera contando hacia abajo así:
[0.8,0.6,0.4,0.2] , entonces, ¿cómo podría extraer el paso con éxito?
En este caso, necesito la respuesta -0.2 , mi respuesta no funcionaría y tomar el valor absoluto me daría 0.2 , no -0.2 .
No necesita ninguna lógica de caso especial para el caso de contar hacia abajo. En su segundo ejemplo, simplemente resta el primer término del segundo, 0.6 - 0.8 , y obtiene la respuesta correcta: -0.2 . Esto es similar a cómo en su primer ejemplo, restó el primer término del segundo, 0.4 - 0.2 y obtuvo la respuesta correcta.
Para convencerte de que esto funciona, considera que tu matriz comienza con un número real n y aumenta en un número real k en cada paso:
[n, n + k, n + k*2, n + k*3, ...]Luego puedes restar los dos primeros términos:
(n + k) - nLlegar
k El signo de k no importa.
Esto es lo mismo que tomar la diferencia común de una progresión aritmética en matemáticas. Puedes simplemente restar un término del término anterior y obtendrás la diferencia. Así es como se vería la matriz en términos generales:
[a, a + d, a + 2d, a + 3d, ...] Entonces, a partir de esto, puede ver fácilmente que si realiza (a + d) - (a) , obtendrá d . Restar cualquier elemento del elemento anterior dará el mismo resultado. Así que la forma más sencilla de hacer esto sería:
const getStep = array => (array[1] - array[0]);Demostración usando sus tres matrices provistas:
const getStep = array => (array[1] - array[0]); console.log(getStep([1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0])); console.log(getStep([0.2,0.4,0.6,0.8,1.0,1.2,1.4])); console.log(getStep([0.8,0.6,0.4,0.2]));Tenga en cuenta que los valores anteriores pueden ser inexactos ya que son números de coma flotante (las matemáticas de coma flotante están rotas ), pero puede redondearlos al x-ésimo lugar decimal más cercano (aquí hay una solución con un redondeo de 1/10, por ejemplo) :
const getStep = array => Math.round((array[1] - array[0]) * 10) / 10; console.log(getStep([1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0])); console.log(getStep([0.2,0.4,0.6,0.8,1.0,1.2,1.4])); console.log(getStep([0.8,0.6,0.4,0.2]));Esto en matemáticas se llama progresión aritmética. Si garantiza que la secuencia tiene el mismo paso, seguramente puede tomar la diferencia entre los 2 primeros números de la secuencia.
cuando cuenta hacia abajo, su secuencia es decreciente, por lo tanto, su paso es negativo. No hay forma posible de hacer descender esta secuencia sin un paso negativo.