Nó chỉ như vậy xảy ra tôi đã có một số mã cũ nằm xung quanh mà có thể làm các trick:
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
*/
Xin lỗi, tôi không làm 'fors'. Ít nhất không phải khi tôi không phải làm vậy.
Và fiddle.
Ngoài ra, một sự thay thế fiddle rằng sắp xếp các kết quả khi đưa ra một mảng các đối tượng như thế này:
đưa ra:
var list = [
{str:'zzzzz',value:3},
{str:'aaaaa',value:7},
{str:'ccccc',value:1}
];
kết quả đầu ra:
[
{str: "aaaaa", value: 7},
{str: "ccccc", value: 1},
{str: "zzzzz", value: 3}
]
Điều này dường như với tôi giống như nó gần như là một vấn đề về cặp khóa/giá trị. Trong đó aaaaa là khóa cho 7, ccccc khóa cho 1 và zzzzz khóa cho 3. Trường hợp sử dụng của bạn hoàn toàn yêu cầu bạn duy trì hai mảng riêng biệt hoặc bạn sẽ mở để kết hợp chúng thành một mảng đối tượng tương tự như: arr = [{"key": "aaaaaa", "value": 7}, {"key": "zzzzzz", "value": 3}, ........]? –