2010-11-19 27 views
0

Bunu yapmak için javascript mantığında biraz sıkışmış durumdayım. Temeldejavascript sayı sayma

ben bir numara verirseniz

(30 diyelim)

Ben 5 iki tarafında göstermek istiyorum.

böylece parçası kolay

25 26 27 28 29 30 31 32 33 34 35

olduğunu o. Ancak, bu durumda, sayının 5'in altında olduğu durumlarda ele almam gerekir (3). böylece

1 2 3 4 5 6 7 8 9 10 11

Ama sonra davaları nereye işlemek gerekir sola

eklemek I için istediğiniz ne

, her sayı için

sağda gösterilmeyen, sayı a (maksimum-5) üzerindedir (maksimum = 100, sayı = 98).

yüzden

90 91 92 93 94 95 96 97 98 99 100

Ama sonra davaları nereye işlemek gerekir sağa eklemek I için istediğiniz ne

, her sayı için

solda gösterilmeyen, maksimum 10'un altındadır (sayı = 3, maksimum = 8

Ne yapmak istiyorum

geçerlidir aralığı böylece

1 2 3 4 5 6 7 8

göstermek Ama mantık emin değilim

cevap

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

ranger (10) döndürür: "Önceki: 15,5,14,6,13,7,12,8,11,9" "Sayı: 10" "Sonrası: 15,5,14,6,13 , 7,12,8,11,9 " – Hailwood

+0

@Hail - Var beyanında sabit, sadece sorun. Şimdi mükemmel çalışıyor. – Ben

+0

Bu yöntem de işe yarıyor, bunu bir işlev olarak kabul ettim. ve ön, sayı ve yazının, sadece bir dize yerine işlevdeki tüm ayrı değişkenler olduğu gerçeğini beğeniyorum. – Hailwood

1

Olası bir çözüm:

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' nedir? – Ben

+0

Oops, bunu tespit ettiğiniz için teşekkürler. Biraz daha iyi bir isim seçmeden önce "fromPageNumber", "bir değer" idi. – Hamish

+2

Yakalanmamış ReferenceError: merkezi tanımlanmadı – 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

tüm durumlar için test edilmiştir:

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

Bu yöntem işe yarıyor. – Hailwood