javascript号码计数

时间:2010-11-19 07:48:56

标签: javascript numbers paging

我略微坚持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

但是我需要处理数字高于a(最大值为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

但我不确定逻辑

5 个答案:

答案 0 :(得分:1)

一种可能的解决方案:

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

针对您的所有情况进行测试:

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

答案 3 :(得分:0)

// 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(' '));

答案 4 :(得分:0)

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