我正在尝试按降序对数组进行排序。
这是我目前的代码:
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 } ]
答案 0 :(得分: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;
});
答案 1 :(得分:1)
交换功能不起作用,它只用score分数替换scoresArray中的值。了解++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);