我有点卡在 JavaScript 逻辑上来完成这个任务。
基本上
如果我给出一个数字(比如说30)
我想在两边都显示 5。
所以
25 26 27 28 29 30 31 32 33 34 35
这部分很简单。
但是接下来我需要处理数量低于 5(比如 3)的情况。
我想要的是,
对于右侧未显示的每个数字, 添加到左边
所以
1 2 3 4 5 6 7 8 9 10 11
但是我需要处理数量高于(最大值-5)的情况(比如最大值= 100,数量= 98)。
我想要的是,
对于左侧未显示的每个数字, 添加到右边
所以
90 91 92 93 94 95 96 97 98 99 100
但是我需要处理最大值低于 10 的情况(比如数字 = 3,最大值 = 8
我想要的是,
仅显示适用范围
所以
1 2 3 4 5 6 7 8
但我不确定逻辑
function ranger(num) {
//Establish limits and pre/post array storage
var low = 0, high = 100, howMany = 5;
var pre = [];
var post = [];
//Increment/decrement if appropriate
for(x=1;x<=howMany;x++) {
if((num-x) > low) { pre.push(num-x); }
if((num+x) < high) { post.push(num+x); }
}
pre.reverse();
alert("Before: "+pre+'\nNumber: '+num+'\nAfter: '+post)
}
ranger(7);
ranger(2);
ranger(96);
针对您的所有案例进行了测试:
range = 5;
maximum = 8;
number = 3;
left = right = number;
while(right - left < range*2 ) {
if (right + 1 <= maximum) {
right++;
}
if (left - 1 > 0 ) {
left--;
}
if (right == maximum && left == 1) {
break;
}
}
for(i=left;i<=right;i++) {
console.log(i);
}
一种可能的解决方案:
function getPages(fromPageNumber) {
var result = [];
fromPageNumber= Math.min(94, Math.max(6, fromPageNumber));
for(var i = -5; i <=5; i++)
result.push(fromPageNumber + i);
return result;
}
// Set up your limits and bounds
var radius = 5.
middleNumber = 20,
lowerBound = 1,
upperBound = 100;
// For the defined (and available range) create an array of valid numbers
var results = [];
for (int i = Math.max(middleNumber - radius, lowerBound);
i <= Math.min(middleNumber + radius, upperBound);
i++) {
results.push(i);
}
// Print out the resulting numbers with spaces in between
console.log(results.join(' '));
function getSequence(num, length)
{
var min = 0;
var max=100;
Array result;
for(int i=num-(length/2); i<num+(length/2);i++)
{
if(i>min && i< max)
result.add(i);
}
return result;
}