2016-11-10 10 views
4

, wie zwei Elemente tauschen mit TyposkriptTyposkript Swap-Array Artikel

elements:elements[] =[]; 
elements.push(item1); 
elements.push(item2); 
elements.push(item3); 
elements.push(item4); 


elements[0] is item1 
elements[3] is item4 

Wie kann ich Austausch diese Elemente in Typoskript. Ich weiß, Javascript Art und Weise, wie folgt aus:

* JavaScript-Beispiel temporäre Variable *

var tmp = elements[0]; 
elements[0] = elements[3]; 
elements[3] = tmp; 

aber es gibt jede api gleiche Sache in Typoskript wie array.swap()

+0

nicht die Antwort, die Sie suchen, aber es scheint, wie die JavaScript-Beispiel ist das übliche Beispiel http://stackoverflow.com/questions/872310/javascript-swap-array-elements http: // Stackoverflow. com/questions/4011629/swapping-zwei-artikel-in-javascript-array https://www.kirupa.com/html5/swapping_items_array_js.htm – Kapein

+0

@Kapein ich weiß plain javascript tun es einfach, aber ich kann jede api tun dies in maschinenschrift wissen? hast du meinen Punkt –

+0

die eckige Version 2 davon? – Kapein

Antwort

3

Es gibt keine eingebaute Funktionalität für sie, aber man kann es leicht hinzufügen:

interface Array<T> { 
    swap(a: number, b: number): void; 
} 

Array.prototype.swap = function (a: number, b: number) { 
    if (a < 0 || a >= this.length || b < 0 || b >= this.length) { 
     return 
    } 

    const temp = this[a]; 
    this[a] = this[b]; 
    this[b] = temp; 
} 

(code in playground)

Wenn Sie Module verwenden, dann müssen Sie dies tun erweitern die Array Schnittstelle:

declare global { 
    interface Array<T> { 
     swap(a: number, b: number): void; 
    } 
} 
+1

In Typoskript gibt es eingebauten Funktionen für sie. Es heißt Array-Destrukturierung - siehe die Antwort von Nina – rmcsharry

+0

@rmcsharry Das ist nicht das Gleiche. Was ist, wenn Sie keine neue Instanz erstellen und innerhalb des Arrays selbst tauschen möchten? –

+0

Das ist genau das, was Ninas Antwort zeigt - es wird keine neue Instanz erstellt, Daten werden innerhalb des Arrays selbst ausgetauscht. – rmcsharry

10

tun Warum verwende keine Destrukturierung und ein Array.

[elements[0], elements[3]] = [elements[3], elements[0]]; 
+1

Dies ist die richtige Antwort. Siehe Array destructing Thema hier: https://www.typescriptlang.org/docs/handbook/variable-declarations.html – rmcsharry

2
swapArray(Array:any,Swap1:number,Swap2:number) : any 
{ 
    var temp = Array[Swap1]; 
    Array[Swap1] = Array[Swap2] 
    Array[Swap2] = temp 
    return Array; 
} 
0

Sie können dies in einer Zeile in Javascript (und damit Typoskript) tun, obwohl Sie in Typoskript Array-Struktur wie in einer anderen Antwort gezeigt tun können.

Für primitive Typen, die Sie dies tun können einfache Werte a und b um (Kredit here) zu tauschen (zB ganze Zahlen, Strings.):

a = [b, b=a][0]; 

Also, wenn Sie einen Array mit 3 Elementen hatten, wie so : a = [ 'mich', 'Sie', 'uns']

Sie können 'me' tauschen und 'du' wie folgt aus:

a = [a[1],a[1]=a[0],a[2]] 

So das OP des 4-Element-Array nehmen zu Tauschen Sie die zuerst (0.) und letzten (3.) Elemente, würden Sie tun:

elements = [elements[3],elements[1],elements[2],elements[3]=elements[0]] 

jedoch, dass nicht einfach ist, den Code zu verstehen, so dass ich es nicht empfehlen. Die Verwendung einer tmp-Variablen ist einfacher. Außerdem ist es nicht sehr performant oder wartbar, da Sie jedes Element des ursprünglichen Arrays angeben müssen.

Verwandte Themen