Javascript n'a pas de "tableaux associatifs" comme vous l'imaginez. Au lieu de cela, vous avez simplement la possibilité de définir les propriétés des objets en utilisant une syntaxe de type tableau (comme dans votre exemple), ainsi que la possibilité d'itérer sur les propriétés d'un objet.
Il en résulte qu'il n'y a aucune garantie quant à l'efficacité de l'opération. commander dans lequel vous itérez sur les propriétés, donc il n'y a rien comme un tri pour eux. À la place, vous devrez convertir les propriétés de votre objet en un "vrai" tableau (qui garantit l'ordre). Voici un extrait de code permettant de convertir un objet en un tableau de deux tuples (tableaux à deux éléments), de le trier comme vous le décrivez, puis d'itérer sur celui-ci :
var tuples = [];
for (var key in obj) tuples.push([key, obj[key]]);
tuples.sort(function(a, b) {
a = a[1];
b = b[1];
return a < b ? -1 : (a > b ? 1 : 0);
});
for (var i = 0; i < tuples.length; i++) {
var key = tuples[i][0];
var value = tuples[i][1];
// do something with key and value
}
Vous trouverez peut-être plus naturel d'envelopper cela dans une fonction qui prend un callback :
function bySortedValue(obj, callback, context) {
var tuples = [];
for (var key in obj) tuples.push([key, obj[key]]);
tuples.sort(function(a, b) {
return a[1] < b[1] ? 1 : a[1] > b[1] ? -1 : 0
});
var length = tuples.length;
while (length--) callback.call(context, tuples[length][0], tuples[length][1]);
}
bySortedValue({
foo: 1,
bar: 7,
baz: 3
}, function(key, value) {
document.getElementById('res').innerHTML += `${key}: ${value}<br>`
});
<p id='res'>Result:<br/><br/><p>
1 votes
Puisque les propriétés des objets n'ont pas d'ordre défini par le langage, vous ne pouvez pas le faire (sauf, peut-être, dans certains moteurs JS en fonction de la manière particulière dont ils implémentent les propriétés).