好吧,所以我已经坚持了一段时间而且我没有接近。
run(msg, { text }) {
let sql = 'SELECT username, melo, lelo, celo FROM users';
var count = 0;
db.query(sql, (err, rows) => {
var users = [];
if (text == 'mock') {
for (var i = 0; i < rows.length; ++i) {
count++;
users.push([count + ') '], [rows[i].username + ': '], [rows[i].melo]);
}
var arr = users.sort((a, b) => {
return b[2] - a[2];
});
console.log(users);
// console.log(arr);
msg.channel.send(arr);
}
});
}
我可以把它列出来。但是我可以把它弄清楚,好吧......任何东西。我已经通过几种不同的方式完成了这项工作,但无济于事。这是我尝试的最后一种方法,它只列出所有内容,就像普通数组一样。不过我希望列出:
1) name highernumber
2) name lowernumber
3) name evenlowernumber
如果有帮助,可以想象一下RPG排行榜。
答案 0 :(得分:1)
首先,应该在数组之后分配索引 排序,除非这是要求。
我相信您正在尝试创建一个数组数组并对顶级数组进行排序,因此return b[2] - a[2]
。
这不起作用,因为
users.push([count + ') '], [rows[i].username + ': '], [rows[i].melo])
不会创建嵌套数组,只是将多个元素添加到同一个数组中。你需要的是
users.push([count + ') ', rows[i].username + ': ', rows[i].melo])
但即使在此,计数也不会按顺序排列,因为它有 在排序之前已经分配。以下代码将为您提供 要求的结果。
run(msg, { text }) {
let sql = 'SELECT username, melo, lelo, celo FROM users';
var count = 0;
db.query(sql, (err, rows) => {
var users = [];
if (text == 'mock') {
for (var i = 0; i < rows.length; ++i) {
users.push([rows[i].username + ': ', Number(rows[i].melo)]);
}
var arr = users.sort((a, b) => {
return b[1] - a[1];
});
for (var i = 0; i < arr.length; ++i) {
count += 1
arr[i].unshift(count + ') ')
arr[i] = arr[i].join()
}
console.log(users);
// console.log(arr);
msg.channel.send(arr);
}
});
}