Tengo una matriz que se denomina rango y una variable de búsqueda. Ahora estoy tratando de obtener el valor de rango coincidente de mi matriz de rango. Traté de reducir el método pero me da una salida inesperada.
Salida real
Rendimiento esperado
Mi código
var lookup = 51; var range = [0, 100, 150, 200, 300, 300.2]; let filtered = range.reduce((prev, curr) => Math.abs(curr - lookup) < Math.abs(prev - lookup) ? curr : prev); console.log(filtered); //100No funciona en este caso
const lookup = 201; const range = [200, 250, 300, 0, 450, 898].reverse(); const result = range.find(num => num <= lookup); console.log(result); //0Su resultado deseado es un solo número de la matriz de rango, por lo que debe usar .find en lugar de .reduce . Iterar desde la derecha y devolver verdadero para el primer elemento que se itera sobre el que es menor o igual que la búsqueda.
const lookup = 51; const range = [0, 100, 150, 200, 300, 300.2].reverse(); const result = range.find(num => num <= lookup); console.log(result);Si la matriz no se ordena necesariamente primero, ordénela.
const lookup = 201; const range = [200, 250, 300, 0, 450, 898].sort((a, b) => b - a); const result = range.find(num => num <= lookup); console.log(result);