Maison > Article > interface Web > Fonction de rotation magique
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) !