Tak się składa, że miałem jakiś stary kod leżące wokół, że może załatwić sprawę:
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
*/
Przykro mi, ale nie rób "Fors. Przynajmniej nie, kiedy nie muszę.
I fiddle.
również alternatywny fiddle sortuje rezultaty przy podawaniu szereg obiektów tak:
Dane:
var list = [
{str:'zzzzz',value:3},
{str:'aaaaa',value:7},
{str:'ccccc',value:1}
];
Wyjścia:
[
{str: "aaaaa", value: 7},
{str: "ccccc", value: 1},
{str: "zzzzz", value: 3}
]
Wydaje mi się, że to prawie problem z parą klucz/wartość. Gdzie aaaa jest kluczem dla 7, ccccc kluczem dla 1, a zzzzz kluczem dla 3. Czy twój przypadek użycia absolutnie wymaga zachowania dwóch odrębnych tablic lub byłbyś otwarty na łączenie ich w jedną tablicę obiektów podobnych do: arr = [{"key": "aaaaaa", "value": 7}, {"key": "zzzzzz", "value": 3}, ........]? –