2012-11-23 85 views
-1

underscore.js另一項任務Calibarating數據 - 我需要做的「校準」中的數據,圖表中顯示它。與Underscore.JS

鑑於:可用空間:160和數據:data: [10, 50, 80, 90]我想獲得calibratedData: [0, 80, 140, 160]

這裏的算法:

  1. 得到峯的數據,Min=10Max = 90
  2. 得到MinMax80之間的差異。
  3. 獲取可供1單位變化的Unit空間160/80 = 2
  4. 校準數據中的每個項目,使用來自先前步驟的比率: d[i] = (d[i]-Min) * Unit,這給[0, 80, 140, 160]

不知道我是否可以用'linq'able語法underscore.js完成任務。

回答

1

我不明白爲什麼人們downvoted你的問題,但很好玩找到答案。這裏是:

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值,這使得它非常有效的(因爲它沒有按父功能「做T在每次迭代計算)。

+0

謝謝,這是所有關於昇華,我不介意。 – user1514042