2012-11-23 1 views
-1

underscore.js에 대한 또 다른 작업 - 차트에 표시하기 위해 데이터를 '보정'해야합니다.Underscore.JS로 데이터 교정하기

주어진 : 사용 가능한 공간 : 160 및 데이터 : data: [10, 50, 80, 90] 나는 calibratedData: [0, 80, 140, 160]을 얻고 싶습니다.

  1. 데이터, Min=10, Max = 90의 피크를 얻을 :

    여기 알고리즘입니다.

  2. MinMax 사이의 차이를 얻으십시오. 80[0, 80, 140, 160] 제공 d[i] = (d[i]-Min) * Unit :
  3. 가 이전 단계에서 비 사용 160/80 = 2
  4. 보정으로 데이터의 각 항목을 변경 1 유닛 Unit 가능한 공간을 얻는다.

내가 'linq'able 구문 underscore.js을 사용하여 작업을 수행 할 수 있는지 궁금합니다.

답변

1

나는 왜 사람들이 당신의 질문을 슬퍼했는지 이해하지 못한다. 그러나 그 답을 찾는 것이 재미 있었다. 여기있다 :

function calibrate(data, availableSpace) { 
    var min = _.min(data); 
    var max = _.max(data); 
    var range = max - min; 
    var spacePerUnit = availableSpace/range; 
    return _.map(data, function (value) { 
     return (value - min) * spacePerUnit; 
    }); 
} 

alert(calibrate([10, 50, 80, 90], 160)); 

당신은 this JSFiddle에서 그것을 시도 할 수 있습니다.

키는이 기능 밑줄에 map() 함수를 사용하는 것이다

function (value) { 
    return (value - min) * spacePerUnit; 
} 

이 함수는 케이 때문에 (매우 효율적 상위 함수의 최소값, 최대 값에 접근하고 spacePerUnit 값을 갖는다 모든 반복에서 계산을 수행하지 않음).

+0

감사합니다. 승화에 관한 모든 것이 괜찮습니다. – user1514042