Учитывая эти входы: начало, конец, количество выемок
start = a number;
end = a larger number;
numberOfNotches = a number; // includes start and end values
Как рассчитать промежуточные значения в диапазоне для отображения?
Пример:
start = 100;
end = 200;
numberOfNotches = 6; // includes start and end values
Вывод:
100 ----- 120 ----- 140 ----- 160 ----- 180 ----- 200
Вот что я имею в JavaScript
function getNotchValues(from, to, numberOfNotches){
var step = Math.floor( ( (to - from) / (numberOfNotches-2) ));
from = Math.floor(from/step)*step;
to = Math.ceil(to/step)*step;
var arr = [];
for(var i=from; i<=to; i=i+step){
arr.push(i);
}
return arr;
}
Вот логика, которой я до сих пор, но это не работает для меня: http://jsfiddle.net/w8vwG/
Похож на проблему " один за другим"/fencepost. Появляется, чтобы работать нормально с одним небольшим изменением:
(numberOfNotches-1)
В этой строке:
var step = Math.floor( ( (to - from) / (numberOfNotches-1) ));
Редактировать:
Я думаю, что это полное решение, рассматривающее проблему в моем комментарии ниже:
function getNotchValues(from, to, numberOfNotches) {
var step = Math.floor(((to - from) / (numberOfNotches - 1)));
var arr = [];
for (var i = from; i <= to; i = i + step) {
arr.push(i);
}
arr[arr.length - 1] = to
return arr;
}
to - from
равномерно делится наnumberOfNotches - 1
. Вы можете приблизить его, не округляя шаг, а округляя позже. Это может сделать вас в конечном итоге один на последнем элементе, хотя.