Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 排序分数-最低排名第一_Sorting_Google Apps Script - Fatal编程技术网

Sorting 排序分数-最低排名第一

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

我有一个脚本在这里,它显示了用户的第一个最高分数。我怎样才能让分数较低的用户第一个看到呢。因为我在故事情节中有一个时间戳,他们破解代码的速度越快(这是一个游戏),他们就越好。代码如下:

我不是JS专家,我来这里是想在提问时了解更多

// 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
});
}

您应该将问题减少到所需的最低限度,例如,仅显示您尝试排序的数据结构和您尝试的内容。