2017-05-19 5 views
0

dieses Array Got:Sortierung Gewohnheit in Winkel js

$scope.items = [ 
    { 
     itemId: "1.1.1" 
    }, 
    { 
     itemId: "1.1.10" 
    }, 
    { 
     itemId: "1.1.2" 
    }, 

    ] 

Ich will es durch Punkt getrennt nach jeder Nummer sortieren.

So ist die erwartete Ausgabe ist:

$scope.items = [ 
    { 
     itemId: "1.1.1" 
    }, 
    { 
     itemId: "1.1.2" 
    }, 
    { 
     itemId: "1.1.10" 
    } 
    ] 

dies möglich ist, mit dem Standard-Winkel js orderBy zu tun?

Link to Fiddle

+3

Ich bin verwirrt, die Geige, die du gepostet hast, produziert deine erwartete Ausgabe. Außerdem würde ich erwarten, dass "1.1.2" vor "1.1.10" – George

+0

@George kommt. Hoppla, ich verliere mich. Aktualisierte Frage, – Per

Antwort

6

können Sie Array.prototype.sort

Die Sortierfunktion sortiert die Array verwenden, indem Unicode-Codepunkte, aber Sie können Ihre eigenen benutzerdefinierte Vergleichsfunktion entsprechen Ihre Sortieranforderungen passieren, die benutzerdefinierte Vergleichsfunktion in nimmt zwei Werte und vergleicht sie und legt sie nach dem zurückgegebenen Wert.

$scope.items.sort(
    function(a,b){ 

     /*creates an integer array 
     of all numbers in the dot separated string.*/ 

     let a_array = a.split('.').map(v => parseInt(v)); 
     let b_array = b.split('.').map(v => parseInt(v)); 

     /*sorts for each digit, 
     move to next digit 
     if and only if the current digits are not equal*/ 
     if(a_array[0] != b_array[0]) 
      return a_array[0] - b_array[0]; 

     if(a_array[1] != b_array[1]) 
      return a_array[1] - b_array[1]; 

     if(a_array[2] != b_array[2]) 
      return a_array[2] - b_array[2]; 
    }); 

Wenn Sie die Sortierrichtung umkehren wollen, umkehren nur die Positionen von a_array und b_Array in jeder return-Anweisung.