get closest number out of array in array in javascript

59 views Asked by At

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]))
2

There are 2 answers

0
Mr. Polywhirl On BEST ANSWER

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]

0
Nina Scholz On

You could check the absolute delta.

const
    getClosest = (a, b, t) => Math.abs(t - a) < Math.abs(t - b) ? a : b,
    getClosestPair = (target, array) => values.reduce((a, b) => 
        [0, 1].map(i => getClosest(a[i], b[i], target[i]))
    ),
    values = [[12, 42], [12, 56], [30, 54]],
    closest = getClosestPair([12, 50], values);
    
console.log(closest);