2016-04-30 13 views
0

Ich versuche meine Objektschlüssel zu sortieren. Wenn ich mein Objekt drucke, drucke es immer zuerst bb. Kann das jemand erklären?Warum funktioniert Object.keys (data) .sort() nicht wie erwartet?

Es sollte aa zuerst drucken? Ich habe meine Schlüssel schon sortiert.

Mein erster Schlüssel sollte aa sein und dann sollte zweiter bb sein.

Hier ist mein Code

var data = { 
    bb:"bb", 
    aa:"cc" 
}; 
Object 
    .keys(data) 
    .sort(); 
console.log(data) 

DEMO

Antwort

3

Zwei Dinge:

  • Objekte in JS haben keine Reihenfolge der Elemente, wie Arrays tun
  • Object.keys ein Array von Objekt zurückgibt Schlüssel, es ändert nicht das Objekt selbst, siehe das folgende Beispiel:

var data={bb:"bb",aa:"cc"}; 
 
var arr = Object.keys(data); 
 
arr.sort(); 
 
console.log(arr); // the array IS modified, 
 
        // but it has nothing to do with the original object

0

versuchen diese

var data={bb:"bb",aa:"cc"}; 
var keys = Object.keys(data); 
keys.sort(); 

var obj = {}; 
for(i = 0; i < keys.length; i++){ 
    obj[keys[i]] = data[keys[i]]; 
} 

console.log(obj); 
0

Es gibt keine Methode für Objektschlüssel in JavaScript Sortierung, aber Sie können dies wie dies durch ein Objekt Prototyp tun.

Object.prototype.sortKeys = function() { 
 
     var sorted = {}, 
 
     key, a = []; 
 
    
 
     for (key in this) { 
 
      if (this.hasOwnProperty(key)) { 
 
       a.push(key); 
 
      } 
 
     } 
 
    
 
     a.sort(); 
 
    
 
     for (key = 0; key < a.length; key++) { 
 
      sorted[a[key]] = this[a[key]]; 
 
     } 
 
     return sorted; 
 
    } 
 

 
    var data = {bb: "bb", aa :"cc"}; 
 
    
 
    alert(JSON.stringify(data.sortKeys())); // Returns sorted object data by their keys

Verwandte Themen