【问题标题】:Can someone clarify what is happening in this part of the code?有人可以澄清这部分代码中发生了什么吗?
【发布时间】:2021-10-12 02:48:08
【问题描述】:

所以我有这样的部分代码

ruter.get('/', async function (_, res) {
const [categories, items] = (await Promise.all([
    db.query('SELECT * FROM categories'),
    db.query('SELECT * FROM inventory'),
])).map(result => result.rows);

for (const category of categories) {
    category.items = items.filter(item => (item.categoryid === category.id));
}

我有数据库,其中有表类别和表项 类别表和项目如下所示:

我不明白这部分代码中类别和库存会发生什么 ->

   db.query('SELECT * FROM categories'),
    db.query('SELECT * FROM inventory'),
])).map(result => result.rows);

他们加入了吗?也在这部分

category.items = items.filter(item => (item.categoryid === category.id));

这里的item是什么意思,items表中没有item这个列?

谢谢!

【问题讨论】:

    标签: javascript sql node.js web


    【解决方案1】:

    这个

    const [categories, items] = (await Promise.all([
        db.query('SELECT * FROM categories'),
        db.query('SELECT * FROM inventory'),
    ])).map(result => result.rows);
    
    • 进行两个查询 - 一个来自类别,一个来自库存
    • 并行,与Promise.all
    • 然后从每个查询结果中获取rows 属性并将其放入categoriesitems 变量中。

    它们没有加入 - 它们是两个完全独立的查询,并被放入单独的 categoriesitems 变量中。

    这里是什么意思

    items.filter(item =>
    

    items 是查询 SELECT * FROM inventory 的结果 - item 是该查询的单行。

    【讨论】:

    • 谢谢,如果我用另一个名字代替 item 是否重要,我认为不是吗?但不确定
    • 不,它只是一个参数名称,可以是您想要的任何名称。 .filter(item =>.filter(row =>
    • 但是如果它们是两个独立的查询(类别和项目),那么 category.items 意味着什么?我知道类别是表类别中的一行,但表类别没有名为项目的列?这让我很困惑
    • 代码将相关项目分配给类别记录的属性,以便以后访问。你是对的,它在数据库中没有 items 列 - 这里的代码 创建 这样一个属性(本地),基于 items 查询的过滤结果。
    • category.items = items.filter(item => 的那一行本质上是为每个 category 行(或对象)添加一列(或属性)。它只是改变 JS 变量,而不是底层数据库。实际表没有这样的列。
    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 2022-06-17
    • 2015-02-04
    • 1970-01-01
    相关资源
    最近更新 更多