var arr= [10,43,5,5,96,7,80,30];sort可以直接得出排序结果。但是现在希望得到的是排序后原有下标的排序。比如如果上面数字按照从大到小排序,最后结果就应该是:[4,6,1,7,0,5,2,3]

解决方案 »

  1.   

    var arr= [10,43,5,5,96,7,80,30];
    var p=[];
    for(var i=0;i<arr.length;i++){
    p.push({value:arr[i],index:i});
    }
    p.sort(function(a,b){return b.value-a.value;});
    var r=[];
    for(var i=0;i<p.length;i++){
    r.push(p[i].index);
    }
    alert(r);
      

  2.   

    感觉有点绕 没时间细想,你先凑活用吧
    var arr= [10,43,5,5,96,7,80,30];
    for(var i = 0; i < arr.length; i++) {
    arr[i] = {key:i,value:arr[i]};
    }
    arr.sort(function(a,b){
    return b.value - a.value;
    });var result = [];
    for(var tmp in arr) {
    result.push(arr[tmp].key);
    }
    alert(result);
      

  3.   

    谢谢。
    再问一个。
    var arr= [[1,2],[2,8],[3,9],[4,1]];根据第二个值把二维数组重排序。
    希望得到 [[3,9],[2,8],[1,2],[4,1]];
      

  4.   

    var arr= [[1,2],[2,8],[3,9],[4,1]];
    arr = arr.sort(function(a,b) {
    return b[1] - a[1];
    });
      

  5.   

    不知道这是不是你想要的效果。var arr = [23,42,1,5,3,7,79];
    var oldArr = arr.concat([]);
        var len = arr.length;
    arr.sort(function(a,b){ return a*1 > b*1 ? 1 : -1});
    var a = [];
    for(var i=0;i<len; i++){
    for(var j =0;j<len;j++){
    if(oldArr[i] == arr[j]){
    a.push(j);
    }
    }
    }
    document.write('==原来的数组=='+ '<br/>');
    document.write('['+oldArr+']' + '<br/>');
    document.write('==排序后的数组=='+ '<br/>');
    document.write('['+arr+']' + '<br/>');
    document.write('==原来数组在排序后的数组的元素的位置=='+ '<br/>');
    document.write('['+a+']' + '<br/>');