如何将mysql数据行转换为javascript数组?Node.js应用程序

如何将mysql数据行转换为javascript数组?Node.js应用程序,javascript,mysql,arrays,node.js,Javascript,Mysql,Arrays,Node.js,首先,我是个新手。毫无疑问,我犯了一些简单的错误 使用Node.js和MySQL数据库,我正在构建一个允许用户登录的基本web应用程序。一旦他们登录,他们将被带到他们的个人资料页面,并以条形图的形式显示他们所做测验的结果 我想把一行mysql数据转换成一个数组 const mysql = require('mysql'); const dbconfig = require('/config/database'); const connection = mysql.createConnection

首先,我是个新手。毫无疑问,我犯了一些简单的错误

使用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);
}
constmysql=require('mysql');
const dbconfig=require('/config/database');
const connection=mysql.createConnection(dbconfig.connection);
query('USE'+dbconfig.database);
//为每个类别创建一个分数数组,具体取决于
//洛格丁。
var CategorityScoreQuery=
'选择c1q1、c1q2、c1q3、c1q4、c1q5、c1q6、c1q7、c1q8
从nodejs_login.assessment_得分
作为一个参与者,在a.responder\u id=u.user\u responder\u id上以u的身份加入用户
其中a.responder_id=user.user_responder_id;“;
connection.connect(函数(err){
如果(错误)抛出错误;
query(category1scoreQuery,函数(err,result,fields){
如果(错误)抛出错误;
Object.keys(结果).forEach(函数(键){
var CAT1阵列=结果[键];
//要返回数组,例如[“45/60”、“60/60”、“40/40”、“30/40”、“15/20”,
// "30/40", "30/60", "20/40"];
控制台日志(CAT1阵列);
})
})
});
//我想将其转换为数组,以便将字符串数组解析为
//maxCategoryScore上的totalUserScore
var i;
var userCategoryScore1=0;
var maxCategoryScore=0;
对于(i=0;i
这是我实际得到的,不允许我循环通过

行数据包{

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 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)
参考文献[第1部分]:

说明: 方法返回给定对象自身可枚举属性值的数组,其顺序与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)
参考文献[第二部分]:

说明:
reduce()方法在数组的每个元素上执行一个reducer函数(您提供的),产生一个输出值。

这是通过javascript与数据库交互时常见的问题。要获得所需内容,可以尝试使用JSON库,如下所示:

usersRows = JSON.parse(JSON.stringify(result));
var results = await connection.query(category1scoreQuery); 
//Process results here

这也与你的问题不完全相关,但它让我的生活变得更容易当我这样做:考虑使用节点<强>允诺< /强>模块将你的查询转换成承诺(从这里:)。这样一来,您就不必像编写代码那样使用回调,而应该像这样:

usersRows = JSON.parse(JSON.stringify(result));
var results = await connection.query(category1scoreQuery); 
//Process results here
同样,这只是一个建议,但我发现有些东西非常有用


干杯

您看过
push
阵列原型功能的文档了吗@Josh请查看发布的解决方案,并让我知道这是否适用于问题的两个部分?非常感谢!实际上,我想在使用chart.js的条形图中使用这些变量,但我不知道如何存储这些变量,然后在我的自定义charts.js文件中使用它们。有什么想法吗?这实际上取决于您使用的图表库,比如它需要什么格式?图表库是charts.js。我现在将提出另一个单独的问题。谢谢你在这个话题上的帮助!真的帮助了我。