无法访问数组中的javascript对象

时间:2018-03-18 15:49:49

标签: javascript arrays javascript-objects

我的javascript中有一些错误,我似乎无法弄明白。我正在通过MySql查询创建汽车对象。此外,我将这些对象存储到一个数组(carArray)。

稍后我尝试访问这些对象时似乎出现问题。在这个例子中,我想在表中呈现对象。

function AddTableOfCars(){

// Table headers
var heading = new Array();
   heading[0] = "Merke";
   heading[1] = "Reg.nr.";
   heading[2] = "Sist endret";

// Database connection
var mysql      = require('mysql');
var connection = mysql.createConnection({
   host     : 'db_host',
   user     : 'db_user',
   password : 'db_password',
   database : 'db_name'
});

// Empty array to store cars
var carArray = [];

connection.connect();
var stmt = 'SELECT `VehicleID`,`VehicleMake`,`LicenseNumber`,`IsActive`,`DateChanged` FROM `db_table`';
connection.query(stmt, function (error, rows, fields) {
if (error) console.log(error.code);
else {

 // Loop through query result
 // Create car objects
 // Store car objects in array

 for (var i = 0; i < rows.length; i++) {
   var carObj = new Car(rows[i].VehicleID, rows[i].VehicleMake, rows[i].LicenseNumber, rows[i].IsActive, rows[i].DateChanged);
   carArray.push(carObj);

    }
 }
 });

 connection.end();

 // Table columns
 var table = document.getElementById('car-table');

 for (var i = 0; i < carArray.length; i++) {
   var row             = table.insertRow(i);
   var cellMake        = row.insertCell(0);
   var cellLicense     = row.insertCell(1);
   var cellDateChanged = row.insertCell(2);

   cellMake.innerHTML        = carArray[i].VehicleMake;
   cellLicense.innerHTML     = carArray[i].LicenseNumber;
   cellDateChanged.innerHTML = carArray[i].DateChanged;
 }

// Logs for debugging purposes
console.log(carArray);
console.log(carArray[0]);

}

我的console.log(carArray);在控制台中返回以下内容:

[]
0:汽车
1:汽车
长度:2

到目前为止,它似乎加起来了。但是,当我尝试使用console.log(carArray[0]);访问数组中的一个对象时,它会返回undefined

此时有没有人对我有任何指示。它很可能只是我错过的一个小细节。但是我一直在看我的代码很长一段时间了,我开始看动物而不是代码...

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我认为您可能遇到了一些异步问题。看看是否对此进行排序:

function AddTableOfCars() {

    let tableHeaders = ["Merke", "Reg.nr.", "Sist endret"];
    let mysql = require('mysql');
    let stmt = 'SELECT `VehicleID`,`VehicleMake`,`LicenseNumber`,`IsActive`,`DateChanged` FROM `db_table`';
    let connection = mysql.createConnection({
        host: 'db_host',
        user: 'db_user',
        password: 'db_password',
        database: 'db_name'
    });
    connection.connect();
    connection.query(stmt, function (error, rows) {
        if (error) {
            console.log(error.code);
        } else {
            let carArray = [];
            rows.forEach(row => {
                carArray.push(new Car(row.VehicleID,
                    row.VehicleMake,
                    row.LicenseNumber,
                    row.IsActive,
                    row.DateChanged));
            });
            buildTable(carArray);
        }
    });
    connection.end();
}

function buildTable(carArray){
    // Table columns
    var table = document.getElementById('car-table');

    carArray.forEach(car => {
        var row             = table.insertRow(i);
        var cellMake        = row.insertCell(0);
        var cellLicense     = row.insertCell(1);
        var cellDateChanged = row.insertCell(2);
        cellMake.innerHTML        = car.VehicleMake;
        cellLicense.innerHTML     = car.LicenseNumber;
        cellDateChanged.innerHTML = car.DateChanged;
    });
}

注意:我看不到您对tableHeaders的使用,但无论如何我都将其留下了。