在jQuery中排名用户分数
我有一个由600条记录组成的数组,格式如下:在jQuery中排名用户分数,jquery,Jquery,我有一个由600条记录组成的数组,格式如下: [ Mac 14 John 12 abc 12 bill 16 ] {John, Nikhil C.,467},{Cule, Mac A.,341},{Pat, Ryan,465} [ [0...99]: [ [0...9]: [ 0: "{John, Nikhil C.", 1: "467}",
[ Mac 14
John 12
abc 12
bill 16 ]
{John, Nikhil C.,467},{Cule, Mac A.,341},{Pat, Ryan,465}
[
[0...99]: [
[0...9]: [
0: "{John, Nikhil C.",
1: "467}",
2: "{Cule, Mac A.",
3: "341}",
4: "{Pat, Ryan",
5: "465}",
],
我试图为上面的内容创建一个排名模型,从这个意义上说,bill的排名是1,mac的排名是2,john的排名是3,abc的排名是3,并将其推回到数组中。例如
[ Mac 14 2
John 12 3
abc 12 3
bill 16 1 ]
以下是我尝试过的代码:
var items = data.d.results;
if(items.length > 0){
for (i = 0; i < items.length; i++) {
playerDetails.push( items[i].Title , items[i].Points );
}
var scores = playerDetails.map(function(d) { return d[1]; }).sort().reverse();
console.log(playerDetails);
这在jQuery中可能吗?如果是,如何实现?
谢谢这在javascript中是可能的,不需要jQuery 此示例引入了一个新的分数数组,用于排序:
var data = [['Mac', 14],['John', 12],['abc',12],['bill',16]];
var scores = data.map(d => d[1]).sort().reverse();
data = data.map(d => d.concat([scores.indexOf(d[1])+1]));
如果您不介意根据分数对整个数据集进行排序,那么可以完全在原始数据中进行操作。然后,您可以在迭代中使用当前项目的排名,并且只检查当前项目的排名是否与前一个相同:
data
.sort((a,b) => b[1] - a[1])
.forEach((d,i,a) => d.push(i > 0 && a[i-1][1] == d[1] ? a[i-1][2] : i+1));
这在javascript中是可能的,不需要jQuery 此示例引入了一个新的分数数组,用于排序:
var data = [['Mac', 14],['John', 12],['abc',12],['bill',16]];
var scores = data.map(d => d[1]).sort().reverse();
data = data.map(d => d.concat([scores.indexOf(d[1])+1]));
如果您不介意根据分数对整个数据集进行排序,那么可以完全在原始数据中进行操作。然后,您可以在迭代中使用当前项目的排名,并且只检查当前项目的排名是否与前一个相同:
data
.sort((a,b) => b[1] - a[1])
.forEach((d,i,a) => d.push(i > 0 && a[i-1][1] == d[1] ? a[i-1][2] : i+1));
我查找了map函数,但只能找到一个传递回调的函数,我不知道d=>d[1]在这里做什么,您能提供一个解释或链接吗?是ECMAScript 6函数声明的缩写。它在中提供,但我发现在这个论坛中传达想法而不使用冗长的语法混乱代码是非常有用的。您可以将
map(d=>d[1])
重写为map(函数(d){returnd[1];})
等。谢谢您的回复。我尝试了代码,得到了“第行语法错误:var score=playerDetails.map(d=>d[1]).sort().reverse();在这种情况下,您可能正在运行IE或不支持上述箭头函数的旧浏览器。Doesvar score=playerDetails.map(函数(d){return d[1];}.sort().reverse()
给出相同的错误吗?您好。上面这行代码有效:var scores=playerDetails.map(函数(d){return d[1];}).sort().reverse();我查找了map函数,但只能找到一个回调传递的函数,我不知道是什么d=>d[1]这是一个ECMAScript 6函数声明的简写。它在中提供,但我发现在这个论坛中传达思想而不使代码混乱的冗长语法非常有用。你可以将map(d=>d[1])
重写为map(function(d){return d[1];})
,等等。谢谢你的回复。我尝试了代码,得到了“行中的语法错误:var scores=playerDetails.map(d=>d[1]).sort().reverse();在这种情况下,您可能正在运行IE或不支持上述箭头功能的旧浏览器。var score=playerDetails.map(函数(d){return d[1];}).sort().reverse()是否给出了相同的错误?您好。上面的代码行起作用:var scores=playerDetails.map(函数(d){returnd[1];}).sort().reverse();