尝试将数据库中的整数添加到 let 但总是返回 NaN
Posted
技术标签:
【中文标题】尝试将数据库中的整数添加到 let 但总是返回 NaN【英文标题】:Trying to add ints from database to a let but always returning NaN 【发布时间】:2020-01-15 06:08:05 【问题描述】:我一直在尝试从我的数据库 (mysql/phpMyAdmin) 中的表中获取一些数字并将它们添加到代码中的“let”中,但最终输出始终为 NaN。
我尝试使用 parseInt() 函数以防表中的数字被视为字符串但没有成功。
var pointsQuery = "SELECT * FROM reacts WHERE userid=" + message.author.id;
con.query(pointsQuery, function (err, rows, fiedls)
if (err)
message.channel.send(err.message);
throw err;
let upvotes = 0;
let downvotes = 0;
for (var i in rows)
upvotes = upvotes + parseInt(rows[i].upvotes, 10);
downvotes = downvotes + parseInt(rows[i].downvotes, 10);
upvotes = upvotes - parseInt(rows, 10);
downvotes = downvotes - parseInt(rows, 10);
console.log("up: " + upvotes);
console.log("down:" + downvotes);
let finalPoints = 10 + parseInt((upvotes - (downvotes * 2)), 10);
message.channel.send("<@" + message.author.id + "> has " + finalPoints + " points!");
)
我用于“调试”的两个 console.log 的输出应该是一个数字,但输出的是“NaN”。
final points
应该是表达式 10 + (upvotes - (downvotes * 2))
的结果
【问题讨论】:
如果 rows 是一个数组,那么这将导致您的问题:upvotes = upvotes - parseInt(rows, 10);
不确定那或下一行是什么意思
你可以试试 parseInt(rows[i]);不要在里面写10
@Pete @Deepak Jha,rows
是一个数组,但在 for 循环中使用时,它似乎像 int 一样工作,用于告诉代码它必须执行多少次循环。我假设如果我解析rows
,它会在此处执行与for
循环相同的操作。我试图在没有基数 (10) 的情况下解析 rows
,但它仍然输出 NaN。
在第 13、14 行,upvotes = upvotes - parseInt(rows, 10);
和 downvotes = downvotes - parseInt(rows, 10);
应该做什么?你不能解析和数组到一个数字。像循环一样添加索引,也许你的意思是array.Last()
?
如果你想减去总行数,你需要根据你的框架使用array.Length
或array.Count
指定你想要的长度。此外,您确实应该创建一个变量 let len = parseInt(rows.Length, 10);
来减去,因为您使用相同的值执行两次,并且您不应该浪费资源
【参考方案1】:
在第 13 行和第 14 行中,您尝试将其解析并排列成一个 Int 是不可能的。如果您想减去总行数,您需要根据您的框架使用array.Length
或array.Count
指定您想要的长度。此外,您确实应该创建一个变量 let len = parseInt(rows.Length, 10);
来减去,因为您使用相同的值执行了两次,并且您不应该浪费资源
(来自 cmets 的转贴答案)
代码:
let len = parseInt(rows.Length, 10);
upvotes = upvotes - len;
downvotes = downvotes - len;
【讨论】:
以上是关于尝试将数据库中的整数添加到 let 但总是返回 NaN的主要内容,如果未能解决你的问题,请参考以下文章