我有一个数组,其中包含600条记录,格式为:
[ Mac 14
John 12
abc 12
bill 16 ]
我正在尝试为上面创建一个排名模型,在某种意义上,bill有rank1,mac为rank 2,john,abc为rank3并将其推回到数组。例如
[ 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);
初始的playerdetails数组包含以下格式的数据:
{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}",
],
这在jQuery中是否可行?如果是的话,如何实现呢? 感谢
答案 0 :(得分:5)
这在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));