2012-10-23 4 views
0

나는이 문제에 대해 몇 번이나 생각났다. 좋은 해결책이 없다.가장 가까운 값을 얻는 것

숫자가 고정 된 간격이 아닌 고정 된 간격 인 myArray이 있다고 가정합니다. 전체 숫자 (부정적 일 수 있음)를 가져 와서 가장 가까운 배열의 값을 반환 할 수있는 함수를 갖고 싶습니다. 내 예에서는 850을 반환하고 싶습니다.

나는 바른 길에. 내가 전달 값에 가장 가까운 배열 값 중 어떤 해결하기 위해 upperlower 변수를 사용할 필요가

암 I을 생각하거나 더 효율적인 방법이있다 이것을 달성하고 누군가가 내게 바른 방향으로 찔러 주겠습니까? 여기

는 내가 지금까지 무엇을 가지고 :

var myArray = [0,850,1800,2500,3300]; 

function snapTo(value){ 
    var upper = -1; 
    var lower = -1; 

    // if the value is bigger than the last array value 
    if(value > myArray[myArray.length-1]){ 
     upper = myArray[myArray.length-1]; 
     lower = myArray[myArray.length-2]; 
    // if the value is smaller than the first array value 
    } else if(value < myArray[0]){ 
     upper = myArray[1]; 
     lower = myArray[0]; 
    } else { 
     for(var i = 0, i < myArray.length, i++){ 
      if(value > myArray[i]){ 
       upper = myArray[i]; 
       lower = myArray[i-1]; 
       break; 
      } 
     } 
    } 

    // x being the index of the closest array value to the one passed in 
    return myArray[x]; 
} 

snapTo(1200); 
+1

http://stackoverflow.com/questions/3561275/using-jquery-how-would-i-find 가장 근접한 일치하는 배열 번호 – jwaliszko

답변

1

값이 이전 배열 값보다 큰지 작은지를 확인할 필요가 없다는 것을 알려주지. 대신 목표 값과 "현재"배열 요소 사이의 절대적인 차이점을 찾아보십시오. 그리고이 배열 인덱스가 지금까지 우승 후보인지 여부를 결정하기 위해 지금까지의 가장 좋은 차이점과 비교하십시오 ...

+0

감사하지만 이진 검색 경로를 사용하기로 결정했습니다. 다시 말해 휠을 다시 발명하지 않습니다. – boz

+0

@boz 물론 -이 문제에 대한 최선의 방법이 될 것 같습니다. 나는 현재의 접근 방식이 어떻게 향상 될 수 있는지를 배우기 위해 지적하고 싶었다. –

관련 문제