using jquery, how would i find the closest match in an array, to a specified number
Asked Answered
C

2

10

using jquery, how would i find the closest match in an array, to a specified number

For example, you've got an array like this:

1, 3, 8, 10, 13, ...

What number is closest to 4?

4 would return 3
2 would return 3
5 would return 3
6 would return 8

ive seen this done in many different languages, but not in jquery, is this possible to do simply

Christianachristiane answered 24/8, 2010 at 21:41 Comment(1)
jQuery is a JavaScript library to ease DOM traversion and manipulation and doing Ajax stuff, not to do maths. For this "plain" JavaScript is namely more than suitable. Have you considered looking at JavaScript?Salyers
U
39

You can use the jQuery.each method to loop the array, other than that it's just plain Javascript. Something like:

var theArray = [ 1, 3, 8, 10, 13 ];
var goal = 4;
var closest = null;

$.each(theArray, function(){
  if (closest == null || Math.abs(this - goal) < Math.abs(closest - goal)) {
    closest = this;
  }
});
Underweight answered 24/8, 2010 at 21:48 Comment(6)
brilliant, works beautifully, thanks for such a quick reply, and clean codeChristianachristiane
Better check by closest === null, otherwise 0 == null would return true as well.Interfaith
@MarkusSiebeneicher: Where do you get that result? When I try it (in Firefox), 0 == null is false.Underweight
@Guffa: you are right, I mixed something up. After coding years with non-strict variable types, I got a bit paranoid when coding javascript. Anyway, its good practice to use === for explicit type check. In this case, it really doesnt matter. Thanks for pointing it out.Interfaith
closest is not a number.. I am getting this when I render closest in console Number {[[PrimitiveValue]]: 678}Provocative
@ImranBughio: It's a number, what you get in the console is just how that specific browser chose to display it. The Number object is the formal form of a numeric value in JavaScript, but browsers only create actual Number object instances when needed. Most of the time numbers are handled as primitive values.Underweight
H
0

Here's a generalized version, taken from: http://www.weask.us/entry/finding-closest-number-array

int nearest = -1;
int bestDistanceFoundYet = Integer.MAX_INTEGER;
// We iterate on the array...
for (int i = 0; i < array.length; i++) {
   // if we found the desired number, we return it.
   if (array[i] == desiredNumber) {
      return array[i];
   } else {
      // else, we consider the difference between the desired number and the current number in the array.
      int d = Math.abs(desiredNumber - array[i]);
      if (d < bestDistanceFoundYet) {
         // For the moment, this value is the nearest to the desired number...
         nearest = array[i];
      }
   }
}
return nearest;
Hospitaler answered 24/8, 2010 at 21:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.