2010-08-24 15 views
10

utilisant jquery, comment pourrais-je trouver le plus proche dans un tableau, à un nombre spécifiéen utilisant jquery, comment pourrais-je trouver le plus proche dans un tableau, à un certain nombre

Par exemple, vous avez un tableau comme celui-ci:

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

Quel est le numéro le plus proche de 4?

4 retournerait 3
2 retourneraient 3
5 retournerait 3
6 retournerait 8

ive vu cela dans de nombreuses langues différentes, mais pas dans jquery, est-ce possible de faire simplement

+6

jQuery est une bibliothèque JavaScript pour faciliter DOM Traversion et la manipulation et à faire des trucs Ajax, ne pas faire des mathématiques. Pour ce "simple" JavaScript est plus que convenable. Avez-vous envisagé de regarder JavaScript? – BalusC

Répondre

39

Vous pouvez utiliser la méthode jQuery.each pour boucler le tableau, sauf que c'est simplement du Javascript. Quelque chose comme:

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; 
    } 
}); 
+1

brillant, fonctionne magnifiquement, merci pour une réponse rapide, et nettoyer le code –

+0

Mieux vérifier par ** plus proche === null **, sinon 0 == null reviendrait aussi vrai. –

+0

@MarkusSiebeneicher: Où obtenez-vous ce résultat? Quand je l'essaye (dans Firefox), '0 == null' est faux. – Guffa

0

est ici une version généralisée, tirée de: 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;