Ich muss Schlüssel in einem Objekt anhand seiner Werte sortieren. Ich habe versucht, die Sortiermethode von Javascript zu verwenden, konnte es aber noch nicht herausfinden. Mein Objekt sieht aus wie:

var myJson = [
        {
        "4": 3,
        "5": 3,
        "14": 3,
        "18": 3,
        "20": 1,
        "23": 3,
        "25": 3,
        "33": 3,
        "36": 3
    }
];

Ich muss den Namen und das Schlüsselpaar so sortieren, dass Folgendes bestellt wird:

var myJson = [
        {
        "4": 3,
        "5": 3,
        "14": 3,
        "18": 3,
        "23": 3,
        "25": 3,
        "33": 3,
        "36": 3,
        "20": 1
    }
];
-1
Imran 26 Nov. 2013 im 20:24

3 Antworten

Beste Antwort

Angenommen, Sie möchten die Elemente in sortierter Reihenfolge aus dem Objekt abrufen. Sie können die Schlüssel aus dem Objekt abrufen, die Schlüssel sortieren und die Werte aus dem Objekt abrufen. Siehe unten,

var keys = [];
for(var k in obj) keys.push(k);
keys.sort();

for (var i = 0; i < keys.length; i++) {
  console.log(obj[key]);
}
2
Selvakumar Arumugam 26 Nov. 2013 im 16:29

Wie bereits erwähnt, können Sie ein Objekt nicht sortieren, aber Sie können diese Werte in der richtigen Reihenfolge (in einem Array) ausgeben. Sie können das Array der Reihe nach durchlaufen und entweder die Tasten oder die Werte oder was auch immer Sie benötigen ziehen.

Das folgende Skript entfernt das erste Objekt aus dem Array myJson und erstellt ein neues Array von Arrays, wobei jeder Eintrag [Schlüssel, Wert] ist.

// pull the hash out of the array
var j = myJson[0]; // first element is the hash

// for each hash entry, build an array pair
var as_array = []
for(k in j) { 
   as_array.push([parseInt(k,10), j[k]]); 
}
// sort first by value desc, then by key asc
var sorter = function(a,b) { return (a[1] < b[1]) && (b[0] > a[0]); }
var sorted = as_array.sort(sorter)

// show the results
sorted.forEach(function(el) { console.log(el); }

Mir ist auch aufgefallen, dass die Sortierung komplizierter erscheint als nur .sort, da Sie zuerst nach Werten (absteigend) und dann nach Schlüsseln sortieren möchten - ich hoffe, ich habe das richtig gelesen.

0
mr rogers 26 Nov. 2013 im 16:52

Wie bereits erwähnt, haben Objekte keine Reihenfolge. Sie müssten also Ihre Objektstruktur ändern, um eine Sortierung zu ermöglichen.

var myJson = [
    { "itemA" : { "value1": "4", "value2" : 3 } },
    { "itemB" : { "value1": "5", "value2" : 3 } },
    { "itemC" : { "value1": "14", "value2" : 3 } },
    { "itemD" : { "value1": "18", "value2" : 3 } }
];

Jetzt haben Sie ein Array von Objekten, die über eine benutzerdefinierte Sortierfunktion nach beliebigen Werten sortiert werden können.

myJson.sort(function(a,b) {
    if (a.value2 == b.value2) {
        return parseInt(a.value1,10) - parseInt(b.value1,10);
    }
    return a.value2 - b.value2; 
});

Natürlich funktioniert die obige Funktion nur, wenn die Werte in value2 Ganzzahlen und die Werte in value1 Zeichenfolgendarstellungen von Ganzzahlen sind ... aber Sie haben die Idee.

0
Steve 26 Nov. 2013 im 16:40