2010-11-19 41 views
0

我稍微停留在JavaScript邏輯來完成此操作。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

但我不知道在邏輯

回答

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

遊俠(10)返回: 「之前:15,5,14,6,13,7,12,8,11,9」 「編號:10」 「之後:15,5,14,6,13 ,7,12,8,11,9「 – Hailwood 2010-11-19 08:21:56

+0

@Hail - 修正了var聲明中的問題。現在完美運作。 – Ben 2010-11-19 08:27:17

+0

這種方法也適用,我接受了這個方法,因爲它是一個函數。我喜歡這樣一個事實,即pre,num和post都是函數中的單獨變量,而不僅僅是一個字符串。 – Hailwood 2010-11-19 08:53:12

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

什麼'someValue'? – Ben 2010-11-19 08:07:40

+0

哎呀,謝謝你的發現。在我選擇一個稍微好一些的名字之前,'fromPageNumber'是'someValue'。 – Hamish 2010-11-19 08:08:55

+2

未捕獲ReferenceError:中心未定義 – Hailwood 2010-11-19 08:20:04

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(' ')); 
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; 
} 
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); 
} 
+0

這種方法可行。 – Hailwood 2010-11-19 08:52:05