javascriptarraysclosest

get closest number out of array in array in javascript


I know this is a bit on nonsense but I need to get the closest number out of 2 arrays or:

const myarr = [[12, 42], [12, 56], [30, 54]]

console.log(colsest_out_of_closest(myarr, [12, 50]))

Solution

  • It looks like you want to find the smallest difference between both the min and the max.

    const closest_out_of_closest = (arr, criteria) => {
      const [min, max] = criteria;
      let result, prevDiff = Number.MAX_VALUE;
      arr.forEach((item) => {
        const [localMin, localMax] = item;
        const diff = Math.abs(localMin - min) + Math.abs(localMax - max);
        if (diff < prevDiff) {
          prevDiff = diff;
          result = item;
        }
      });
      return result;
    };
    
    const myarr = [[12, 42], [12, 56], [30, 54]];
    
    console.log(closest_out_of_closest(myarr, [12, 50])); // [12, 56]

    Here is a reducer version that is less bytes, but still readable:

    const closestRange = (arr, [min, max]) =>
      arr.reduce((acc, [lMin, lMax]) =>
        (diff => diff < acc.prev ? { result: [lMin, lMax], prev: diff } : acc)
        (Math.abs(lMin - min) + Math.abs(lMax - max)),
      { result: null, prev: Number.MAX_VALUE }).result;
    
    console.log(closestRange([[12, 42], [12, 56], [30, 54]], [12, 50])); // [12, 56]