在javascript中查找数组中的数字

在javascript中查找数组中的数字,javascript,Javascript,我使用以下代码查找数组中最接近的值 var x=[0,1,2,3,4,5]; var pointX=1.5; $.each(x, function() { if (closest == null || Math.abs(this - pointX) < Math.abs(closest - pointX)) { closest = this; } }); 对于本例,它返回20,但我不希望返回,因为1.5不在范围(20-25)内。在这种情况下,它应该返回n

我使用以下代码查找数组中最接近的值

var x=[0,1,2,3,4,5];
var pointX=1.5;

$.each(x, function() {
    if (closest == null || Math.abs(this - pointX) < Math.abs(closest - pointX)) {
        closest = this;
    }
});
对于本例,它返回20,但我不希望返回,因为1.5不在范围(20-25)内。在这种情况下,它应该返回null。我该怎么做呢?

试试看

function closest(x, pointX){
    var closest = null;

    if(pointX < x[0] || pointX > x[x.length -1]){
        return null
    }


    $.each(x, function(i,v) {
        if (closest == null || Math.abs(v - pointX) <= Math.abs(closest - pointX)) {
            closest = v;
        }
    });
    return closest;
}
函数最近(x,pointX){
var=null;
if(点xx[x.length-1]){
返回空
}
$。每个(x,函数(i,v){
if(最接近==null | | Math.abs(v-pointX)数组[array.length-1]){
返回空
}
$。每个(数组、函数(i、v){
如果(最接近==null | | Math.abs(v-pointX)尝试

函数最近(x,pointX){
var=null;
if(点xx[x.length-1]){
返回空
}
$。每个(x,函数(i,v){
if(最接近==null | | Math.abs(v-pointX)数组[array.length-1]){
返回空
}
$。每个(数组、函数(i、v){

如果(最接近==null | | Math.abs(v-pointX)如果输入数组总是被排序,那么Arun的答案是正确的。否则这对您来说应该是可行的:

function getClosest(x, pointX) {
    var closest = null;

    // Work out min and max
    var min = Math.min.apply(null, x);
    var max = Math.max.apply(null, x);

    // Only calculate closest if point is within array
    if (pointX >= min && pointX <= max) {    
        var i;
        // removed the each as it wasn't really necessary 
        for (i = 0; i < x.length; i++) {                         
            if (closest == null || Math.abs(x[i] - pointX) < Math.abs(closest - pointX)) {
                closest = x[i];
            }
        }
    }
    return closest;
}
函数getClosest(x,pointX){
var=null;
//算出最小值和最大值
var min=Math.min.apply(null,x);
var max=Math.max.apply(null,x);
//仅当点位于阵列内时计算最近点

如果(pointX>=min&&pointX如果输入数组总是被排序,那么Arun的答案是正确的。否则,这对您应该有用:

function getClosest(x, pointX) {
    var closest = null;

    // Work out min and max
    var min = Math.min.apply(null, x);
    var max = Math.max.apply(null, x);

    // Only calculate closest if point is within array
    if (pointX >= min && pointX <= max) {    
        var i;
        // removed the each as it wasn't really necessary 
        for (i = 0; i < x.length; i++) {                         
            if (closest == null || Math.abs(x[i] - pointX) < Math.abs(closest - pointX)) {
                closest = x[i];
            }
        }
    }
    return closest;
}
函数getClosest(x,pointX){
var=null;
//算出最小值和最大值
var min=Math.min.apply(null,x);
var max=Math.max.apply(null,x);
//仅当点位于阵列内时计算最近点

如果(pointX>=min&&pointX“它将返回20。但它是错误的。它将返回null。”-你的意思是希望它返回20?还是希望它返回null?我被问题的最后一部分弄糊涂了。你是说它应该返回20,但不返回,而是返回
null
?还是应该返回null(因为它不在最小值和最大值范围内)而是返回20?不。它将返回20。但我不想这样。我不需要返回任何内容(即null)。这与JQuery完全无关。我正在删除标记。数组中的值是否总是像您的两个示例一样有序?“它将返回20。但它是错误的。它将返回null。”-你是说你希望它返回20?还是希望它返回null?我被问题的最后一部分弄糊涂了。你是说它应该返回20,但不返回,而是返回
null
?还是应该返回null(因为它不在最小值和最大值内)但是是否返回20?不。它将返回20。但是我不想要这个。我不需要任何东西将被返回(即null)这与JQuery完全无关。我正在删除标记。数组中的值是否总是像您的两个示例那样按顺序排列?答案很好,但只有当输入数组从最低到最高排序时,您才认为数组是有序的sorted@SteveClaridge这是一个很好的答案,但前提是输入数组从低到高排序假设数组是sorted@SteveClaridge这是一个假设
function getClosest(x, pointX) {
    var closest = null;

    // Work out min and max
    var min = Math.min.apply(null, x);
    var max = Math.max.apply(null, x);

    // Only calculate closest if point is within array
    if (pointX >= min && pointX <= max) {    
        var i;
        // removed the each as it wasn't really necessary 
        for (i = 0; i < x.length; i++) {                         
            if (closest == null || Math.abs(x[i] - pointX) < Math.abs(closest - pointX)) {
                closest = x[i];
            }
        }
    }
    return closest;
}