Express.js,MySQL,通过一个属性分隔数据项

时间:2018-11-14 12:06:42

标签: javascript mysql arrays express javascript-objects

我有一个名为 row 的变量,其中包含以下内容:

[ RowDataPacket {
    id: 15,
    worknumber: '543/242',
    note: '',
    timestamp: 2018-12-18T12:17:15.000Z,
    uploadroute: null,
    isDone: 'false' },
  RowDataPacket {
    id: 16,
    worknumber: '123/123',
    note: 'retek',
    timestamp: 2018-12-18T12:17:15.000Z,
    uploadroute: null,
    isDone: 'false' },
  RowDataPacket {
    id: 17,
    worknumber: '5/34',
    note: 'anal',
    timestamp: 2018-12-18T12:17:15.000Z,
    uploadroute: null,
    isDone: 'false' } ]

我想根据“ isDone”属性将此内容分为两个其他变量。 这是我拨打电话的代码:

router.get('/', function (req, res) {
    var totalTrue;
    var totalFalse;
    connection.query("SELECT * FROM tickets", function (err, row, field) {
        for (i = 0; i < row.length; i++) {
            if (row[i].isDone == "false") {
                totalFalse += row[i];
                console.log(totalFalse);
            } else {
                totalTrue += row[i];
            }
        }
        res.render('list', { title: 'List', layout: 'listLayout', trueRow: totalTrue, falseRow: totalFalse });
    })
});

由于某种原因,调用后“ totalFalse”变量将包含此变量:

undefined[object Object][object Object][object Object]

我不知道如何在将“ RowDataPocket”保持其结构的同时正确地将其分成这些变量。请与我分享解决方案,谢谢!

1 个答案:

答案 0 :(得分:0)

您似乎将数组和对象视为字符串。您不能将一个对象连接到另一个这样的对象并期望得到有意义的输出-它只是将它们字符串化,这是没有用的。

这就是我想要的-具有两个空数组,然后根据项目的isDone状态将响应中的项目推入这些数组中的一个或另一个中:

router.get('/', function (req, res) {
    var totalTrue = []; //defined as an array
    var totalFalse = []; //defined as an array
    connection.query("SELECT * FROM tickets", function (err, row, field) {
        for (i = 0; i < row.length; i++) {
            if (row[i].isDone == "false") {
                totalFalse.push(row[i]); //add a new item to the array
                console.log(totalFalse);
            } else {
                totalTrue.push(row[i]); //add a new item to the array
            }
        }
        res.render('list', { title: 'List', layout: 'listLayout', trueRow: totalTrue, falseRow: totalFalse });
    })
});

P.S。我不知道您打算发送给“ render”方法的是每个数组中的实际数据本身,还是只是每个类别中有多少个项目的计数?如果您只想保留一个计数,则可以省去这些数组,只需执行以下操作即可:

router.get('/', function (req, res) {
    var totalTrue = 0; //counter
    var totalFalse = 0; //defined as an array
    connection.query("SELECT * FROM tickets", function (err, row, field) {
        for (i = 0; i < row.length; i++) {
            if (row[i].isDone == "false") {
                totalFalse++; //increase the count
                console.log(totalFalse);
            } else {
                totalTrue++; //increase the count
            }
        }
        res.render('list', { title: 'List', layout: 'listLayout', trueRow: totalTrue, falseRow: totalFalse });
    })
});