2016-10-20 5 views
1

Ich habe ein großes Objekt, das ich nach einem Wert sortieren muss, so dass in absteigender Reihenfolge aufgeführt ist (der Bereich ist 7-2). Im Moment bin ich mir nicht sicher, was wirklich mit der Sortierreihenfolge zu tun hat, es scheint mir ziemlich zufällig zu sein, obwohl ich davon ausgehe, dass es eine gewisse Logik gibt. HierUmordnen eines Objekts durch einen ganzzahligen Wert

ist ein Beispiel Teilmenge der Daten:

property_list = { 
    1 : { 
     description : '...', 
     specs : { 
      bedroom_number: 7 
     } 
    }, 
    2 : { 
     description : '...', 
     specs : { 
     bedroom_number: 3 
     } 
    }, 
    3 : { 
     description : '...', 
     specs : { 
      bedroom_number: 5 
     } 
    } 
} 

Also brauche ich von specs.bedroom_number so neu zu ordnen, dass sie ordnen sind als 7, 5, 3 in Bezug auf die Schlafzimmer Zahlenwert.

Ist diese Art der Sortierung möglich? Oder erfordert es eine Art Schleife, um durch das Objekt zu arbeiten und jedes Objekt zu einem neuen Datensatz hinzuzufügen?

+1

Objekte haben nicht den Auftrag. Sie können die * Schlüssel * eines Objekts in einem Array sortieren, das Sie verwenden, oder Sie können Ihre Daten in einem Array anstelle eines Objekts speichern. –

+0

@MikeC Das ist also nur mit einem Array möglich? Wie erfolgt die Bestellung mit einem Array? – user1486133

+1

Wenn Sie sie in einem Array haben, können Sie die Funktion ['sort'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) verwenden. Übergeben Sie Ihre eigene Sortierfunktion, um die 'spec.bedroom_number' Werte zu vergleichen. Der Link, den ich gepostet habe, zeigt ein Beispiel, wie man eine eigene Sortierfunktion schreibt. –

Antwort

2

Sie können ein neues Array von Objekten aus Ihrer Variable property_list und dann sortieren erstellen, indem specs.bedroom_number mit der Verwendung von Array.prototype.sort():

var property_list = {1: {description: '...',specs: {bedroom_number: 7}},2: {description: '...',specs: {bedroom_number: 3}},3: {description: '...',specs: {bedroom_number: 5}}}, 
 
    arr = Object 
 
     .keys(property_list) 
 
     .map(function (key) { 
 
      return property_list[key]; 
 
     }) 
 
     .sort(function (a, b) { 
 
      return b.specs.bedroom_number - a.specs.bedroom_number; 
 
     }); 
 

 
console.log(arr);

+0

Vielen Dank! Das funktioniert :) – user1486133

+0

So froh zu helfen –

Verwandte Themen