Poy*_*oyo 4 javascript sorting
给定一组Objects带有名称和分数的集合:
[
{score: 14, name:"apple"}
{score: 13, name:"orange"}
{score: 11, name:"banana"}
{score: 11, name:"cabbage"}
{score: 11, name:"bread"}
{score: 2, name:"cherry"}
{score: 2, name:"cheese"}
]
Run Code Online (Sandbox Code Playgroud)
我将如何生成这样的排名数字:
[
{rank: 1, score: 14, name:"apple"}
{rank: 2, score: 13, name:"orange"}
{rank: 3, score: 11, name:"banana"}
{rank: 3, score: 11, name:"cabbage"}
{rank: 3, score: 11, name:"bread"}
{rank: 6, score: 2, name:"cherry"}
{rank: 6, score: 2, name:"cheese"}
]
Run Code Online (Sandbox Code Playgroud)
因为其中一些对象并列,所以它们得到相同的数字,而后面的则被抵消。
Array.map 用一些逻辑就能解决问题:
var ranked = data.map(function(item, i) {
if (i > 0) {
//Get our previous list item
var prevItem = data[i - 1];
if (prevItem.score == item.score) {
//Same score = same rank
item.rank = prevItem.rank;
} else {
//Not the same score, give em the current iterated index + 1
item.rank = i + 1;
}
} else {
//First item takes the rank 1 spot
item.rank = 1;
}
return item;
});
Run Code Online (Sandbox Code Playgroud)
演示:http : //jsfiddle.net/s0zvfubn/1/
var ranked = data.map(function(item, i) {
if (i > 0) {
//Get our previous list item
var prevItem = data[i - 1];
if (prevItem.score == item.score) {
//Same score = same rank
item.rank = prevItem.rank;
} else {
//Not the same score, give em the current iterated index + 1
item.rank = i + 1;
}
} else {
//First item takes the rank 1 spot
item.rank = 1;
}
return item;
});
Run Code Online (Sandbox Code Playgroud)