Ich möchte Ihnen eine magische Rotate- oder Array-Flip-Funktion vorstellen:
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 Du hast die Tür verlassen? Es macht nichts, wenn Sie es nicht sehen, lassen Sie es mich erklären.
Am Beispiel des ersten rotate(data,1) entspricht dies der Verschiebung aller Elemente vom ersten bis zum vorletzten um eine Position nach rechts, und die Elemente vom letzten zum letzten Das Element zeichnete einen Halbmondbogen und erreichte die erste Position.
Und rotate(data,2) führt den gleichen Vorgang basierend auf rotate(data,1) aus.
rotate(data,3)Basierend auf rotate(data,2)...
Das ist auch Es ist noch nicht vorbei noch. Die Funktion drehen hat leistungsfähigere Funktionen. Was passiert, wenn Sie versuchen, eine negative Zahl einzugeben?
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]
Wenn Sie vorsichtig sind, werden Sie wahrscheinlich schnell feststellen, dass dies der umgekehrte Vorgang zum Rotieren einer positiven Zahl ist.
Wie wird reagiert, wenn 0 übergeben wird?
rotate(data, 0) // => [1, 2, 3, 4, 5]
0 Mal umdrehen, macht das nicht einfach nichts? ^_^
Diese Funktion ist fast nutzlos Was nicht möglich ist:
Zahlenarrays können gespiegelt werden, und auch andere Objektarrays können gespiegelt werden.
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]
Drehen Sie es so oft um, wie Sie möchten! Auch wenn es zehntausende Male vorkommt!
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]
Okay, nachdem wir so viele magische Funktionen gesehen haben, wollen wir darüber nachdenken, wie wir sie umsetzen können.
Da es drei grundlegende Situationen gibt: positive Zahlen, negative Zahlen und Null, besiegen wir sie nacheinander!
Für positive Zahlen schreiben Sie einfach diese Funktion speziell:
if(typeof Array.prototype.shiftRight !== "function"){ Array.prototype.shiftRight = function(n){ while(n--){ this.unshift(this.pop()); } }; }
Verlassen Sie sich dann für negative Zahlen einfach auf diese Funktion mit der umgekehrten Funktion:
if(typeof Array.prototype.shiftLeft !== "function"){ Array.prototype.shiftLeft = function(n){ while(n--){ this.push(this.shift()); } }; }
Zuletzt integrieren Sie es einfach und schon kommt die Funktion Drehen heraus:
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; }
Das Obige ist der Inhalt der magischen Drehfunktion. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!