0

我正在尝试将数组按降序排序。

这是我当前的代码:

for(var i = 0; i < scoresArray.length; i){
function swap(a, b) {
            var temp = scoresArray[a].score;
            scoresArray[a] = scoresArray[b].score;
            scoresArray[b] = temp;
}
    for(var x = 0; x < scoresArray.length; x++){
        if(scoresArray[x].score < scoresArray[++x].score){
            console.log(x);
            swap(x, ++x);
        }
    }
}
return scoresArray.content;

这是输入数组:

  [
    { url: 'www.lboro.ac.uk', score: 6 },
    { url: 'www.xyz.ac.uk', score: 3 },
    { url: 'www', score: 8 } ]

这(应该是)输出数组:

  [{ url: 'www.xyz.ac.uk', score: 3 },
    { url: 'www.lboro.ac.uk', score: 6 },
    { url: 'www', score: 8 } ]
4

2 回答 2

2

就像@Douglas 所说,使用array.sort(compareFunction)使这更容易:

var scoresArray = [
    { url: 'www.lboro.ac.uk', score: 6 },
    { url: 'www.xyz.ac.uk', score: 3 },
    { url: 'www', score: 8 } ];
scoresArray.sort(function(a,b) {
    return a.score - b.score;
});

请注意,由于scoresArray[i].score是数字,您可以使用return a.score - b.score. 在更一般的情况下(例如,如果它们是字符串),您可以使用

scoresArray.sort(function(a,b) {
    if(a.score > b.score) return 1;
    if(a.score < b.score) return -1;
    return 0;
});
于 2013-11-09T23:42:53.263 回答
1

交换函数不起作用,它仅用分数数字替换 scoreArray 中的值。知道++x改变 的值也很重要x。我想你的意思是x + 1相反。

这大致有效:

var scoresArray = [
    { url: 'www.lboro.ac.uk', score: 6 },
    { url: 'www.xyz.ac.uk', score: 3 },
    { url: 'www', score: 8 } ];

function swap(a, b) {
    var temp = scoresArray[a];
    scoresArray[a] = scoresArray[b];
    scoresArray[b] = temp;
}

for(var i = 0; i < scoresArray.length; i++) {
    for(var x = 0; x < scoresArray.length - 1; x++) {
        if (scoresArray[x].score > scoresArray[x + 1].score) {
            swap(x, x + 1);
        }
    }
}

console.log(scoresArray);

但最好使用array.sort:

var scoresArray = [
    { url: 'www.lboro.ac.uk', score: 6 },
    { url: 'www.xyz.ac.uk', score: 3 },
    { url: 'www', score: 8 } ];

scoresArray.sort(function(a, b) {
    return b.score - a.score;
});

console.log(scoresArray);
于 2013-11-09T23:44:25.700 回答