2010-11-19 14 views
0

Je suis légèrement coincé sur la logique javascript pour accomplir cela.javascript nombre comptage

Fondamentalement

Si je donne un certain nombre (disons 30)

Je veux montrer 5 de chaque côté.

si

25 26 27 28 29 30 31 32 33 34 35

Cette partie est facile.

Mais alors j'ai besoin de gérer les cas où le nombre est inférieur à 5 (disons 3).

Ce que je veux à est,

pour chaque numéro ne figure pas sur le droit, ajouter à la gauche

si

1 2 3 4 5 6 7 8 9 10 11

Mais je besoin pour traiter les cas où le nombre est supérieur à a (maximum-5) (disons maximum = 100, nombre = 98).

Ce que je veux à est,

pour chaque numéro ne figure pas sur la gauche, ajouter à droite

si

90 91 92 93 94 95 96 97 98 99 100

Mais je besoin pour traiter les cas où le maximum est inférieur à 10 (disons nombre = 3, maximum = 8

Ce que je veux est,

afficher uniquement la plage applicable

si

1 2 3 4 5 6 7 8

Mais je ne suis pas sûr de la logique

Répondre

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) retourne: "Avant: 15,5,14,6,13,7,12,8,11,9" "Numéro: 10" "Après: 15,5,14,6,135 , 7,12,8,11,9 " – Hailwood

+0

@Hail - Correction, juste un problème dans la déclaration var. Fonctionne parfaitement maintenant. – Ben

+0

Cette méthode fonctionne également, j'ai accepté celui-ci car c'est une fonction. et j'aime le fait que pre, num, et post sont toutes des variables séparées dans la fonction au lieu d'une simple chaîne. – Hailwood

1

Une solution possible:

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

Qu'est-ce 'someValue'? – Ben

+0

Oups, merci d'avoir repéré ça. 'fromPageNumber' était' someValue' avant de choisir un nom légèrement meilleur. – Hamish

+2

Uncaught ReferenceError: centre n'est pas défini – 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

Testés pour tous vos cas:

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

Cette méthode fonctionne. – Hailwood