碰巧我有一些旧代码躺在附近,可能做的伎俩:
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},........]? –