如何将mysql的数据行转换为javascript数组? Node.js 应用程序
Posted
技术标签:
【中文标题】如何将mysql的数据行转换为javascript数组? Node.js 应用程序【英文标题】:How to convert mysql row of data into a javascript array? Node.js app 【发布时间】:2019-10-01 20:33:06 【问题描述】:首先,我是新手。毫无疑问,我犯了一些简单的错误。
将 Node.js 与 mysql 数据库结合使用,我正在构建一个允许用户登录的基本 Web 应用程序。登录后,他们将被带到他们的个人资料页面,并以条形图的形式显示他们完成的测验结果。
我想将一行mysql数据转换成一个数组。
const mysql = require('mysql');
const dbconfig = require('/config/database');
const connection = mysql.createConnection(dbconfig.connection);
connection.query('USE ' + dbconfig.database);
// Create an array of scores for each category depedning on the user who's
// loggedin.
var category1scoreQuery =
"SELECT c1q1, c1q2, c1q3, c1q4, c1q5, c1q6, c1q7, c1q8
FROM nodejs_login.assessment_score
AS a JOIN users as u ON a.respondent_id = u.user_respondent_id
WHERE a.respondent_id = user.user_respondent_id;";
connection.connect(function(err)
if (err) throw err;
connection.query(category1scoreQuery, function(err, result, fields)
if (err) throw err;
Object.keys(result).forEach(function(key)
var cat1Array = result[key];
// want to return array e.g. ["45/60", "60/60", "40/40","30/40","15/20",
// "30/40", "30/60", "20/40"];
console.log(cat1Array);
)
)
);
// I want to convert it to an array to parse the array of strings into
// totalUserScore over maxCategoryScore
var i;
var userCategoryScore1 = 0;
var maxCategoryScore = 0;
for(i=0; i < cat1Array.length;i++)
var splitScore = cat1Array[i].split("/");
console.log(splitScore);
myQuestionScore = parseInt(splitScore[0], 10);
userCategoryScore1 += myQuestionScore;
console.log(userCategoryScore);
maxQuestionScore = parseInt(splitScore[1]);
maxCategoryScore = maxCategoryScore + maxQuestionScore;
console.log(maxCategoryScore);
这是我实际得到的,不允许我循环。
行数据包
c1q1: '15/60',
c1q2: '15/60',
c1q3: '10/40',
c1q4: '10/40',
c1q5: '5/20',
c1q6: '10/40',
c1q7: '15/60',
c1q8: '10/40'
【问题讨论】:
你看过push
数组原型函数的文档吗? developer.mozilla.org/en-US/docs/Web/javascript/Reference/…
@Josh 检查发布的解决方案并让我知道这是否适用于您的问题的两个部分?
【参考方案1】:
这是通过 javascript 与数据库交互时相当常见的问题。要得到你想要的,你可以尝试使用这样的 JSON 库:
usersRows = JSON.parse(JSON.stringify(result));
此外,这与您的问题并不完全相关,但当我这样做时,它让我的生活变得更轻松:考虑使用节点 Promisify 模块将您的查询转换为承诺(来自这里:https://www.npmjs.com/package/util-promisify)。这样,您就不必像在编写代码那样使用回调了,看起来像这样:
var results = await connection.query(category1scoreQuery);
//Process results here
同样,这只是一个建议,但我发现有些东西非常有用。
干杯!
【讨论】:
【参考方案2】:这应该适合你:
const RowDataPacket=
c1q1: '15/60',
c1q2: '15/60',
c1q3: '10/40',
c1q4: '10/40',
c1q5: '5/20',
c1q6: '10/40',
c1q7: '15/60',
c1q8: '10/40'
const values=Object.values(RowDataPacket);
console.log(values)
参考[第一部分]:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values
说明: Object.values() 方法返回给定对象自己的可枚举属性值的数组,其顺序与 for...in 循环提供的顺序相同(不同之处在于 for-in 循环枚举原型链中的属性以及)。
第二部分,计算总分: //使用第一部分的值数组
const scores=values.reduce((accum,value)=>
const splitValues=value.split('/')
return
score:accum.score + parseInt(splitValues[0]),
maxScore:accum.maxScore + parseInt(splitValues[1]),
,score:0,maxScore:0)
console.log(scores)
参考[第二部分]:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
说明: reduce() 方法对数组的每个元素执行(您提供的)reducer 函数,从而产生单个输出值。
【讨论】:
感谢一百万!然后我实际上想在使用chart.js 的条形图中使用这些变量,但我不知道如何存储这些变量,然后在我的自定义charts.js 文件中使用它们。有什么想法吗? 这实际上取决于您使用的图表库,例如它需要什么格式? 图表库是charts.js。我现在要提出另一个单独的问题。感谢您在此主题上的帮助!真的帮了我。以上是关于如何将mysql的数据行转换为javascript数组? Node.js 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JavaScript 日期转换为 MySQL 日期时间格式? [复制]