使用区间算术

问题描述 投票:0回答:1

假设我们有[-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);  

您知道实现此目标的任何有效方法吗?另外,有人知道这个问题的正确名称是什么吗?我在搜索网络时遇到了麻烦,因为我不知道如何正确描述此问题。

javascript carousel modulo infinite
1个回答
0
投票

首先获取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);
© www.soinside.com 2019 - 2024. All rights reserved.