【问题标题】:Express.js, mysql, separating data items by one attributeExpress.js,mysql,按一个属性分隔数据项
【发布时间】:2018-11-14 12:06:42
【问题描述】:

我有一个名为 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”正确地分离到这些变量中,同时保持它们的结构。请与我分享解决方案,谢谢!

【问题讨论】:

    标签: javascript mysql arrays express javascript-objects


    【解决方案1】:

    您似乎将数组和对象视为字符串。你不能像这样将一个对象连接到另一个对象并期望得到合理的输出——它只是将它们串起来,这是无用的。

    这就是我认为你想要的 - 有两个空数组,然后根据项目的 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 });
        })
    });
    

    附:我不知道您打算发送给“渲染”方法的内容是每个数组中的实际数据本身,还是只是每个类别中有多少项目的计数?如果你只是想保持计数,那么你可以省去数组,然后这样做:

    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 });
        })
    });
    

    【讨论】:

    • 感谢您的快速响应,实际上我正在寻找如何将项目推送到数组中的方法,您展示的很好,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多