假设我们有[-2,-1,0,1,2,3]范围,可以描述为MIN_VALUE = -2和MAX_VALUE = 3我们要实现一个名为infiniteCarousel()的函数,该函数将接受any number并使用模运算符(或其他方式)以计算指定范围内的相应数字。
function infiniteCarousel(value, minValue, maxValue)
{
// todo
// use modulus operator to calculate correct number
// return calculated number
}
// range = [-2, -1, 0, 1, 2, 3]
const MIN_VALUE = -2;
const MAX_VALUE = 3;
var array = [];
// let's calculate number from -10 to 10
for (var i = -10; i<10; i++)
{
array.push( infiniteCarousel(i, MIN_VALUE, MAX_VALUE) );
}
// should print [2, 3, -2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3, -2]
console.log(array);
您知道实现此目标的任何有效方法吗?另外,有人知道这个问题的正确名称是什么吗?我在搜索网络时遇到了麻烦,因为我不知道如何正确描述此问题。
首先获取offset
,如果value
小于零则取maxValue
,否则minValue
。
然后用偏移量调整value
,将其余项与项目的count
相乘,并使用偏移量获取所需范围内的值。
function infiniteCarousel(value, minValue, maxValue) {
var count = maxValue - minValue + 1,
offset = value < 0 ? maxValue : minValue;
return (value - offset) % count + offset;
}
const MIN_VALUE = -2;
const MAX_VALUE = 3;
var array = [];
for (var i = -10; i < 10; i++) {
array.push(infiniteCarousel(i, MIN_VALUE, MAX_VALUE));
}
console.log(...[2, 3, -2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3, -2, -1, 0, 1, 2, 3, -2]); // one to much!
console.log(...array);