Tengo dos matrices.
let arr1 = [32, 35, 25, 37, 40, 45, 42, 46, 44, 45, 49, 50]; let arr2 = [46, 55, 55, 56, 57, 64, 70, 71, 78, 85, 86, 97];Ahora quiero un índice "estable" de ambas matrices. como ¿cuál es el índice cuando ambas matrices son más estatales?
Por ejemplo, de la matriz dada que quiero.
let index = 8 // this is what i want Índice 8 significa desde arr1 el ist "44" y desde arr2 "78"
stable aquí.Al menos la diferencia entre el elemento anterior y el elemento posterior es la menor de ambas matrices. (Perdón por mi mala explicación.)
No marque esta pregunta, solo comente lo que necesita saber, intentaré explicarlo. [Por favor]
Según lo recomendado por @Nina Scholz
Esto es lo que probé hasta ahora [no funciona]
let arr1 = [32, 35, 25, 37, 40, 45, 42, 46, 44, 45, 49, 50]; let arr2 = [46, 55, 55, 56, 57, 64, 70, 71, 78, 85, 86, 97]; let diff_arr1 = [] let diff_arr2 = [] let compare_arr = [] for (let i = 0; i < arr1.length; i++) { diff_arr1.push(Math.abs(arr1[i + 1] - arr1[i])); } for (let i = 0; i < arr2.length; i++) { diff_arr2.push(Math.abs(arr2[i + 1] - arr2[i])); } for (let i = 0; i < 12; i++) { compare_arr.push(Math.abs(diff_arr2[i] - diff_arr1[i])); } console.log("Array 1") console.log("Array 1 diff"); console.log(diff_arr1); console.log("Array 2") console.log("Array 2 diff"); console.log(diff_arr2); console.log('compare_arr') console.log(compare_arr) let arr_temp = compare_arr.filter(function (value) { return !Number.isNaN(value); }); console.log(Math.min.apply(Math, arr_temp));Puede tomar el delta del valor anterior con el valor actual y actual y el siguiente y luego tomar este delta para obtener un delta mínimo de ambos deltas.
El resultado es diferente al deseado, ya que toma el delta mínimo de ambos arreglos.
v 32, 35, 25, 37, 40, 45, 42, 46, 44, 45, 49, 50 NaN 13 22 15 8 8 7 6 3 5 5 NaN 46, 55, 55, 56, 57, 64, 70, 71, 78, 85, 86, 97 NaN 9 1 2 8 13 7 8 14 8 12 NaN const getDelta = (array, offset) => array .map((v, i, a) => Math.abs(v - array[i - 1]) + Math.abs(v - array[i + 1])), array1 = [32, 35, 25, 37, 40, 45, 42, 46, 44, 45, 49, 50], array2 = [46, 55, 55, 56, 57, 64, 70, 71, 78, 85, 86, 97], delta1 = getDelta(array1, 2), delta2 = getDelta(array2, 2), result = [...array1.keys()] .slice(1, -1) .reduce((a, b) => Math.abs(delta1[a] - delta2[a]) < Math.abs(delta1[b] - delta2[b]) ? a : b ); console.log(result); console.log(...delta1.map(v => v.toString().padStart(2, ' '))); console.log(...delta2.map(v => v.toString().padStart(2, ' ')));