2017-10-16 4 views
2

Ich versuche zu finden, ob es eine Möglichkeit gibt, Objekte innerhalb eines Objekts mit einem Bool-Wert zu sortieren. Ich war nicht in der Lage, etwas zu finden, um zu helfen, und nicht einmal sicher, wenn möglich.JS - Untergeordnete Objekte in einem Objekt sortieren

Mein Objekt Beispiel ist dies:

{ 
"Music": { 
    "Key": "Music", 
    "Title": "Music", 
    "Icon": "t-music", 
    "Colour": "blue", 
    "Active": false 
}, 
"The Arts": { 
    "Key": "The Arts", 
    "Title": "The Arts", 
    "Icon": "t-arts", 
    "Colour": "blue", 
    "Active": false 
}, 
"Social": { 
    "Key": "Social", 
    "Title": "Social", 
    "Icon": "t-social", 
    "Colour": "yellow", 
    "Active": true 
} 

}

Gibt es trotzdem, diese Objekte innerhalb des übergeordneten Objekts zu sortieren basierend auf dem „Aktiv“ bool?

+2

Objekte haben keine Reihenfolge – epascarello

+0

Sie können 'Object.keys (yourObj) .sort (...)' ausführen, um die Reihenfolge zu erhalten, in der die Schlüssel angezeigt werden – Thomas

Antwort

1

Obwohl Objekte keine Sortierreihenfolge haben, können Sie diese Objekte in einem Array basierend auf derbool organisieren. Verwenden Sie .sort() und .map().

var obj = { 
    "Music": { 
    "Key": "Music", 
    "Title": "Music", 
    "Icon": "t-music", 
    "Colour": "blue", 
    "Active": false 
    }, 
    "The Arts": { 
    "Key": "The Arts", 
    "Title": "The Arts", 
    "Icon": "t-arts", 
    "Colour": "blue", 
    "Active": true 
    }, 
    "Social": { 
    "Key": "Social", 
    "Title": "Social", 
    "Icon": "t-social", 
    "Colour": "yellow", 
    "Active": true 
    } 
}; 

var sorted = Object.keys(obj) // ["Music", "The Arts", "Social"] 
    .sort(function(a, b) { 
    return obj[b].Active - obj[a].Active; // Organize the category array 
    }) 
    .map(function(category) { 
    return obj[category]; // Convert array of categories to array of objects 
    }); 
+1

besser 'obj [b] .Active - obj [a ] .Active', da es sich um Fälle handelt, in denen "obj [b] .Active === obj [a] .Active" – Thomas

0

Der Begriff der Ordnung in einem Objekt nicht existiert, aber Sie können die Einträge visuell durch die Elemente in ein Array drehen, sortieren sie und machen ein neues Objekt aus, dass mischen.

Sie können aus einem verschachtelten Wert sortieren, indem Sie Array#sort verwenden und eine Funktion übergeben.

let arr = Object.entries(obj).sort(([key1, val1], [key2, val2]) => val2.Active) 

arrayToObject = array => { 
    let newObj = {} 
    array.forEach(([key, val]) => { 
    newObj[key] = val 
    }) 
    return newObj 
} 

console.log(arrayToObject(arr)) 

// { Social: 
// { Key: 'Social', 
//  Title: 'Social', 
//  Icon: 't-social', 
//  Colour: 'yellow', 
//  Active: true }, 
// Music: 
// { Key: 'Music', 
//  Title: 'Music', 
//  Icon: 't-music', 
//  Colour: 'blue', 
//  Active: false }, 
// 'The Arts': 
// { Key: 'The Arts', 
//  Title: 'The Arts', 
//  Icon: 't-arts', 
//  Colour: 'blue', 
//  Active: false } } 
0

Danke Jungs, war

ich nicht sicher, ob Objekte sortiert werden könnte, aber schadet nie zu fragen.

Borja Antwort für mich gearbeitet, aber nur einmal i verwenden Thomas' 'obj [b] .Active - obj [a] .Active'! Anstelle von‘obj [a] .Active & & obj [b]. Aktiv'.

Ich habe gerade Andrews Antwort gesehen und werde das auch testen.

Verwandte Themen