Heim > Web-Frontend > js-Tutorial > Magische Drehfunktion

Magische Drehfunktion

黄舟
Freigeben: 2017-02-15 14:21:11
Original
3030 Leute haben es durchsucht

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]
Nach dem Login kopieren

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]
Nach dem Login kopieren


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]
Nach dem Login kopieren

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]
Nach dem Login kopieren

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]
Nach dem Login kopieren

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());
      }
    };
}
Nach dem Login kopieren

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());
      }
    };
}
Nach dem Login kopieren


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;
}
Nach dem Login kopieren


Das Obige ist der Inhalt der magischen Drehfunktion. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!





Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage