Die folgende Map möchte ich nach pos0 und pos1 sortieren....
var imap = {
1: {
name: 'Test 3',
pos0: 30,
pos1: 20
},
2: {
name: 'Test 1',
pos0: 10,
pos1: 30
},
3: {
name: 'Test 2',
pos0: 20,
pos1: 10
}
}
Diese Funktion erledigt dies:
function mapSort(map,sortBy)
{
/* Array mit den Positionen: 0,1,2... */
var posArr = new Array();
/* Array mit den Keys */
var keyArr = new Array();
/* Array mit den Sortier-Werten */
var valueArr = new Array();
/* die neue Map */
var newMap = {}
/* Counter zum Generieren von posArr */
var cnt = 0;
/* alle keys aus der map holen & arrays befüllen */
for ( var i in map )
{
// pos
posArr[cnt] = cnt;
// key
keyArr[cnt] = i
// value
valueArr[cnt] = map[i][sortBy]
cnt++
}
// posArr nach Daten aus valueArr sortieren
var sPosArr = posArr.sort(function(a,b) {
return valueArr[a]-valueArr[b];
});
// neue Map befüllen
for ( var i = 0; i < sPosArr.length ; i++)
{
var k = keyArr[sPosArr[i]];
newMap[i] = map[k];
}
return newMap;
}