Sorting 排序分数-最低排名第一
我有一个脚本在这里,它显示了用户的第一个最高分数。我怎样才能让分数较低的用户第一个看到呢。因为我在故事情节中有一个时间戳,他们破解代码的速度越快(这是一个游戏),他们就越好。代码如下: 我不是JS专家,我来这里是想在提问时了解更多Sorting 排序分数-最低排名第一,sorting,google-apps-script,Sorting,Google Apps Script,我有一个脚本在这里,它显示了用户的第一个最高分数。我怎样才能让分数较低的用户第一个看到呢。因为我在故事情节中有一个时间戳,他们破解代码的速度越快(这是一个游戏),他们就越好。代码如下: 我不是JS专家,我来这里是想在提问时了解更多 // Usage // 1. Save your GAS Project // // 2. Click: Run > setup // // 3. Click: Publish > Deploy as web app // - enter P
// Usage
// 1. Save your GAS Project
//
// 2. Click: Run > setup
//
// 3. Click: Publish > Deploy as web app
// - enter Project Version Description (optional)
// - set security level and enable service ( execute as 'me' and access 'anyone, even anonymously)
//
// 4. Copy the 'Current web app URL' and paste it into the Leaderboard JavaScript file (first line)
//
/*
** Do Not Edit Below This Line **
*/
// Create a new property service to maintain variables accross instances.
var SCRIPT_PROP = PropertiesService.getScriptProperties();
// What to do when a when we recieve an HTTP GET request
function doGet(e) {
// For this simple app we only need to do one thing.
return addUser(e.parameter['id'], e.parameter['score'])
}
// Add our user record and return the list of top ten.
function addUser(id, score) {
//Open the spreadsheet we set up by it's ID
var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
//Get the first sheet
var sheet = doc.getSheets()[0];
// we want a public lock, one that locks for all invocations
var lock = LockService.getPublicLock();
lock.waitLock(30000); // wait 30 seconds before conceding defeat.
//wrap everything in a try/catch to handle errors
try {
var timeNow = new Date() //create a timestamp
var nextRow = sheet.getLastRow() + 1; // get next empty row
//create an array of data to put into the row
var row = [
[id, score, timeNow]
];
//put the data into the row
sheet.getRange(nextRow, 1, 1, 3).setValues(row);
//sort the sheet with our custom function
sortByScore(sheet)
// get the top ten with our custom function
var top10 = getTop10(sheet)
// get this user's rank from our custom function
var userRank = findUserRank(id, score, timeNow, sheet);
//retun a JSON with the top ten and our user
return ContentService.createTextOutput(JSON.stringify({
"result": "success",
"users": top10,
"user": userRank
})).setMimeType(ContentService.MimeType.JSON);
} catch (e) {//something went wrong. Return an error
return ContentService.createTextOutput(JSON.stringify({
"result": "error",
"error": e
})).setMimeType(ContentService.MimeType.JSON);
} finally { //release lock
lock.releaseLock();
}
}
//sort the sheet by column two (score)
function sortByScore(sheet) {
//find the last row with data
var lastRow = sheet.getLastRow()
// get the range of data
var range = sheet.getRange(2, 1, lastRow, 3)
//sort by score
range.sort({
column: 2,
ascending: false
});
}
// gets the top ten users
function getTop10(sheet) {
//get the first ten rows
var range = sheet.getRange(2, 1, 10, 3)
var users = range.getValues()
var top10 = []; //we'll store those ten users in this array
//loop thru all ten and create a user object for each
for (row = 0, len = users.length; row < len; row++) {
if (users[row][0] != '') {//if the row is not empty
var user = {}; //our user object
//add data for each user
user.id = users[row][0]
user.score = +users[row][1]
user.date = +users[row][2]
//push this user into the array of users
top10.push(user)
}
}
//return the top ten
return top10
}
//find this users rank. In case they have multiple records we use the timestamp to get this record.
function findUserRank(id, score, timeNow, sheet) {
//find the last row with data
var lastRow = sheet.getLastRow()
//get the data from the range
var range = sheet.getRange(2, 1, lastRow, 3)
var users = range.getValues()
var user = {}; //create a user object
//loop thru all rows to find our user
for (row = 0, len = users.length; row < len; row++) {
//if this row is our user
if (users[row][0] == id && users[row][1] == score && users[row][2] == timeNow.toString()) {
//add data to the user object
user.id = users[row][0]
user.score = +users[row][1]
user.date = +users[row][2]
//add the users rank (what row were they?)
user.rank = row + 1
break //exit our loop
}
}
//return this user's data
return user
}
//Setup our spreadsheet
function setup() {
//get the spreadsheet
var doc = SpreadsheetApp.getActiveSpreadsheet();
//save the spreadsheet's id for later
SCRIPT_PROP.setProperty("key", doc.getId());
//get the first sheet
var sheet = doc.getSheets()[0];
//create an array of labels
var row = [
["ID", "score", "Timestamp"]
];
//set the first row of the sheet to our labels
sheet.getRange(1, 1, 1, 3).setValues(row);
}
//用法
// 1. 拯救你的天然气项目
//
// 2. 单击:运行>设置
//
// 3. 单击:发布>部署为web应用
//-输入项目版本说明(可选)
//-设置安全级别并启用服务(以“我”的身份执行并访问“任何人”,甚至匿名)
//
// 4. 复制“当前web应用程序URL”并将其粘贴到排行榜JavaScript文件(第一行)
//
/*
**请勿在此行下方进行编辑**
*/
//创建一个新的属性服务来维护变量和实例。
var SCRIPT_PROP=PropertiesService.getScriptProperties();
//当我们收到HTTP GET请求时,如何处理
函数doGet(e){
//对于这个简单的应用程序,我们只需要做一件事。
返回addUser(e.parameter['id'],e.parameter['score'])
}
//添加我们的用户记录并返回前十名列表。
函数addUser(id、分数){
//打开我们根据其ID设置的电子表格
var doc=SpreadsheetApp.openById(SCRIPT_PROP.getProperty(“key”));
//拿到第一张
var sheet=doc.getSheets()[0];
//我们需要一个公共锁,一个可以锁定所有调用的锁
var lock=LockService.getPublicLock();
lock.waitLock(30000);//等待30秒,然后承认失败。
//用try/catch包装所有内容以处理错误
试一试{
var timeNow=new Date()//创建时间戳
var nextRow=sheet.getLastRow()+1;//获取下一个空行
//创建要放入行中的数据数组
变量行=[
[id、分数、时间]
];
//将数据放入行中
sheet.getRange(nextRow,1,1,3).设置值(行);
//使用自定义函数对工作表进行排序
sortByScore(表)
//通过我们的定制功能获得前十名
var top10=getTop10(表)
//从自定义函数中获取此用户的排名
var userRank=findUserRank(id、score、timeNow、sheet);
//使用前十名和我们的用户重新运行JSON
返回ContentService.createTextOutput(JSON.stringify({
“结果”:“成功”,
“用户”:前10名,
“用户”:userRank
})).setMimeType(ContentService.MimeType.JSON);
}catch(e){//出错。返回错误
返回ContentService.createTextOutput(JSON.stringify({
“结果”:“错误”,
“错误”:e
})).setMimeType(ContentService.MimeType.JSON);
}最后{//释放锁
锁。释放锁();
}
}
//按第二列(分数)对工作表排序
功能sortByScore(表){
//查找包含数据的最后一行
var lastRow=sheet.getLastRow()
//获取数据的范围
变量范围=sheet.getRange(2,1,最后一行,3)
//按分数排序
range.sort({
专栏:2,
升序:假
});
}
//获取前十名用户
函数getTop10(第页){
//前十排
var范围=sheet.getRange(2,1,10,3)
var users=range.getValues()
var top10=[];//我们将把这十个用户存储在此数组中
//循环遍历所有十个对象,并为每个对象创建一个用户对象
for(row=0,len=users.length;row
提前感谢。将
升序
属性更改为真
function sortByScore(sheet) {
//find the last row with data
var lastRow = sheet.getLastRow()
// get the range of data
var range = sheet.getRange(2, 1, lastRow, 3)
//sort by score
range.sort({
column: 2,
ascending: true
});
}
您应该将问题减少到所需的最低限度,例如,仅显示您尝试排序的数据结构和您尝试的内容。