-1

另一个任务underscore.js- 我需要“校准”数据,以便在图表中显示它。

给定:可用空间:160和数据:data: [10, 50, 80, 90]我想得到calibratedData: [0, 80, 140, 160].

这是算法:

  1. 得到数据的峰值, Min=10, Max = 90.
  2. 得到MinMax,之间的差80
  3. 获得可用于变化单元的Unit空间为1160 / 80 = 2
  4. 使用上一步的比率校准数据中的每个项目: d[i] = (d[i]-Min) * Unit,得到[0, 80, 140, 160].

想知道我是否可以使用underscore.js.

4

1 回答 1

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 ) );

您可以在这个 JSFiddle中尝试一下。

关键是使用map()Underscore中的函数和这个函数:

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

该函数可以访问父函数中的 min、max 和 spacePerUnit 值,这使得它非常高效(因为它不会在每次迭代中进行计算)。

于 2012-11-26T14:41:14.997 回答