Si dà il caso che ho avuto un po 'di vecchio codice in giro che potrebbe fare il trucco:
function arrVirtualSortGetIndices(array,fnCompare){
var index=array.map(function(e,i,a){return i;});
fnCompare=fnCompare || defaultStringCompare;
var idxCompare=function (aa,bb){return fnCompare(array[aa],array[bb]);};
index.sort(idxCompare);
return index;
function defaultStringCompare(aa,bb){
if(aa<bb)return -1;
if(bb<aa)return 1;
return 0;
}
function defaultNumericalCompare(aa,bb){
return aa-bb;
}
}
function arrReorderByIndices(array,indices){
return array.map(
function(el,ix,ar){
return ar[indices[ix]];
}
);
}
var array1 = ['zzzzz', 'aaaaaa', 'ccccc'];
var array2 = [3, 7, 1];
var indices=arrVirtualSortGetIndices(array1);
var array2sorted=arrReorderByIndices(array2,indices);
array2sorted;
/*
7,1,3
*/
Siamo spiacenti, non faccio 'fors'. Almeno non quando non devo.
E fiddle.
Inoltre, un'alternativa fiddle che ordina i risultati quando dato un array di oggetti simili:
proposta:
var list = [
{str:'zzzzz',value:3},
{str:'aaaaa',value:7},
{str:'ccccc',value:1}
];
uscite:
[
{str: "aaaaa", value: 7},
{str: "ccccc", value: 1},
{str: "zzzzz", value: 3}
]
Questo mi sembra come se fosse quasi un problema di coppia chiave/valore. Dove aaaaa è la chiave per 7, ccccc la chiave per 1 e zzzzz la chiave per 3. Il tuo caso d'uso richiede assolutamente che tu mantenga due array distinti o sarai aperto a combinarli in una singola matrice di oggetti simile a: arr = [{"key": "aaaaaa", "valore": 7}, {"chiave": "zzzzzz", "valore": 3}, ........]? –