2010-11-19 8 views
0

私はこれを達成するためにjavascriptのロジックに少し固執しています。私は数に(たとえば30)javascriptの数をカウント

を与える場合

は基本的に

私は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

を示した。しかし、私はロジックに確認していない

答えて

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

+0

@Hail - 固定ですが、var宣言に問題があります。今は完璧に動作します。 – Ben

+0

このメソッドも機能しますが、これは関数なのでこれを受け入れました。私は、pre、num、およびpostは単なる文字列ではなく、関数内のすべての別個の変数であるという事実が気に入っています。 – Hailwood

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

+0

おっと、それを見つけてくれてありがとう。私は少し良い名前を選ぶ前に 'fromPageNumber'は' someValue'でした。 – Hamish

+2

未知のReferenceError:中心が定義されていない – Hailwood

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