2010-08-24 33 views
10

usando jQuery, ¿Cómo puedo encontrar el valor más cercano de una matriz, a un número especificadousando jQuery, ¿Cómo puedo encontrar el valor más cercano de una matriz, a un número especificado

Por ejemplo, usted tiene una matriz de esta manera:

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

¿Qué número es cercano a 4?

4 volvería 3
2 volverían 3
5 volverían 3
6 devolvería 8

ive visto este hecho en muchos idiomas diferentes, pero no en jQuery, ¿es posible hacer simplemente

+6

jQuery es una biblioteca JavaScript para aliviar DOM traversion y la manipulación y haciendo cosas Ajax, no para hacer las matemáticas. Para este JavaScript "simple" es decir más que adecuado. ¿Has considerado mirar JavaScript? – BalusC

Respuesta

39

Puede usar el método jQuery.each para hacer un ciclo en la matriz, aparte de eso, es simplemente Javascript. Algo así como:

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

brillante, funciona muy bien, gracias por una respuesta tan rápida, y borre el código –

+0

Mejor revise por ** más cercano === nulo **, de lo contrario 0 == nulo también devolvería verdadero. –

+0

@MarkusSiebeneicher: ¿De dónde sacas ese resultado? Cuando lo intento (en Firefox), '0 == null' es falso. – Guffa

0

He aquí una versión generalizada, tomado 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; 
Cuestiones relacionadas