Maison  >  Article  >  interface Web  >  Fonction de rotation magique

Fonction de rotation magique

黄舟
黄舟original
2017-02-15 14:21:113001parcourir

Je souhaite vous présenter une fonction magique de rotation ou de retournement de tableau :


var data = [1, 2, 3, 4, 5];

rotate(data, 1) // => [5, 1, 2, 3, 4]
rotate(data, 2) // => [4, 5, 1, 2, 3]
rotate(data, 3) // => [3, 4, 5, 1, 2]
rotate(data, 4) // => [2, 3, 4, 5, 1]
rotate(data, 5) // => [1, 2, 3, 4, 5]

Look Have. tu as quitté la porte ? Ce n’est pas grave si vous ne le voyez pas, laissez-moi vous expliquer.

En prenant le premier rotate(data,1) comme exemple, cela équivaut à ce que tous les éléments du premier à l'avant-dernier soient décalés d'une position vers la droite, et le éléments du dernier au dernier L'élément a dessiné un arc de demi-lune et a atteint la première position.

Et rotate(data,2) effectue la même opération basée sur rotate(data,1).

rotate(data,3)Basé sur rotate(data,2)...

C'est aussi Ce n'est pas fini encore. La fonction rotate a des fonctions plus puissantes. Que se passera-t-il si vous essayez de transmettre un nombre négatif ?


rotate(data, -1) // => [2, 3, 4, 5, 1]
rotate(data, -2) // => [3, 4, 5, 1, 2]
rotate(data, -3) // => [4, 5, 1, 2, 3]
rotate(data, -4) // => [5, 1, 2, 3, 4]
rotate(data, -5) // => [1, 2, 3, 4, 5]


Si vous faites attention, vous découvrirez probablement rapidement qu'il s'agit du processus inverse de la rotation nombre positif.

Quelle sera la réaction si 0 est transmis ?


rotate(data, 0) // => [1, 2, 3, 4, 5]

Retourner 0 fois, ça ne fait rien ^_^

Cette fonction est quasiment inutile ? Ce qui ne peut pas être fait :

Les tableaux de nombres peuvent être inversés, et d'autres tableaux d'objets peuvent également être inversés.


rotate(['a', 'b', 'c'], 1)     // => ['c', 'a', 'b']
rotate([1.0, 2.0, 3.0], 1)     // => [3.0, 1.0, 2.0]
rotate([true, true, false], 1) // => [false, true, true]

Retournez-le autant de fois que vous le souhaitez ! Même si cela revient des dizaines de milliers de fois !


var data = [1, 2, 3, 4, 5]

rotate(data, 7)     // => [4, 5, 1, 2, 3]
rotate(data, 11)    // => [5, 1, 2, 3, 4]
rotate(data, 12478) // => [3, 4, 5, 1, 2]

D'accord, après avoir vu tant de fonctionnalités magiques, réfléchissons à la façon de les mettre en œuvre.
Puisqu’il existe trois situations de base : les nombres positifs, les nombres négatifs et zéro, vainquons-les une par une !

Pour les nombres positifs, écrivez simplement cette fonction spécifiquement :


if(typeof Array.prototype.shiftRight !== "function"){
    Array.prototype.shiftRight = function(n){
      while(n--){
        this.unshift(this.pop());
      }
    };
}

Ensuite, pour les nombres négatifs, comptez simplement sur cette fonction avec la fonction opposée :


if(typeof Array.prototype.shiftLeft !== "function"){
    Array.prototype.shiftLeft = function(n){
      while(n--){
        this.push(this.shift());
      }
    };
}


Enfin, il suffit de l'intégrer, et la fonction rotation sort :

function rotate(array,n){
    //copy array
    array = array.slice(0);
    if(n > 0){
        array.shiftRight(n);
    }
    else if(n < 0){
        array.shiftLeft(-n);
    }
    return array;
}


Ce qui précède est le contenu de la fonction de rotation magique. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !





Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn