2014-12-04 3 views
-2

데이터를 가지고 양식을 사용하여 가져 와서이 데이터가있는 웹 사이트의 API를 호출합니다. 하나의 값이 되려면 호출에 해당 값을 검사하고 확인한 다음 그 값을 폼에 입력 된 값의 수를 뺀 백분율로 반환했습니다.값이 근접한 배열 가져 오기

GET /getvalues?id={FORMNUMBER} 

RETURN 
{ 
    "id": {FORMVALUE} 
    "percent": 45 
} 

지금 어떤 경우 API는 여러 값을 반환하고, 그들은 각 값과 연관된 식별자를 가지고, 그래서 그들은 단지 가서 식별자의 값을해야하는 것처럼, 쉬운 것입니다. 제 형태의 값이 두 숫자 사이의 작은 차이를 가지므로 (21) (18)를해야하지만, 값이 40 인 경우에도 I가 18의 값을 취할 경우 이전 예에서

GET /getvalues?id={FORMNUMBER} 

RETURN 
{ 
    "id": {FORMVALUE}, 
    "values" : [ 
       { 
       "value": 18, 
       "percent": 10 
       },{ 
       "value": 45, 
       "percent": 24 
       },{ 
       "value": 57, 
       "percent": 32 
       } 
    ] 
} 

, 그것을 통과하지 않았기 때문에 45의 가치.

나는이 값을 폼을 선택하는 값 옆에 더 가깝게 또는 더 낮게 할 필요가 있으며, 모든 배열을 통해서만 발생하며, 뺄셈과 더 작은 값을 더한다. 배열에, 더 낮은 가치의 끝을 붙잡기. 더 간단한 방법이 있습니까?. 나는 꽤 길고 복잡하고 비효율적 인 함수로만 만들 수 있다고 생각한다. 감사.

답변

0

배열 (array.reverse())을 반대로하면 함수는 마비가 적어집니다.

var values = [{"value": 18, "percent": 10}, {"value": 45, "percent": 24}, {"value": 57, "percent": 32}].reverse(); 
var form_value = 40; 
var percent; 

for (index = 0; index < values.length; ++index) { 
    if (form_value >= values[index].value) { 
    percent = values[index].percent; 
    break; 
    } 
} 

console.log(percent); // 10 
+0

대답 해 주셔서 감사합니다. 코드가 제대로 작동합니다. 난 단지 문제를 발견했습니다, 나는 더 잘 설명하기 위해 미성년자의 지시 된 데이터를 넣었지 만, API를 돌려 줄 필요가 없으므로 그런 식으로 돌려 줄 수는 있지만 실제로 그렇게하지는 않습니다. 예를 들어 다음 값에 대한 값을 변경하면 올바르게 작동하지 않습니다. -> [{ "value": 18, "percent": 10}, { "value": 57, "percent": 32} value ": 45,"percent ": 24}] – Anto