碰巧我有一些舊代碼躺在附近,可能做的伎倆:
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
*/
對不起,我不做「維權」。至少不是當我不需要的時候。
和fiddle。
此外,替代fiddle給定對象的一個這樣的數組時分類結果:
給出:
var list = [
{str:'zzzzz',value:3},
{str:'aaaaa',value:7},
{str:'ccccc',value:1}
];
輸出:
[
{str: "aaaaa", value: 7},
{str: "ccccc", value: 1},
{str: "zzzzz", value: 3}
]
在我看來,這似乎是一個關鍵/值對問題。 aaaaa是7的關鍵,ccccc是1的關鍵字,zzzzz是3的關鍵字。你的用例是否絕對要求你維護兩個不同的數組,或者你是否願意將它們組合成一個對象的單個數組,類似於: arr = [{「key」:「aaaaaa」,「value」:7},{「key」:「zzzzzz」,「value」:3},........]? –