I have one array which is named as range and one lookpup variable. Now I am trying to get the matched range value from my range array. I tried to reduce method but it gives me an unexpected ouput.
Actual output
Expected output
My code
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); //100
Not Working in this case
const lookup = 201;
const range = [200, 250, 300, 0, 450, 898].reverse();
const result = range.find(num => num <= lookup);
console.log(result); //0
Your desired result is a single number from the range array, so you should use .find instead of .reduce. Iterate from the right, and return true for the first element being iterated over that's smaller than or equal to the lookup.
const lookup = 51;
const range = [0, 100, 150, 200, 300, 300.2].reverse();
const result = range.find(num => num <= lookup);
console.log(result);
If the array isn't necessarily sorted first, then sort it.
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);