【问题标题】:How to get all data from objects using node js如何使用node js从对象中获取所有数据
【发布时间】:2020-08-12 04:22:35
【问题描述】:

所以我想显示用户在登录时拥有的所有组。但我只得到 1 个值。我还是个使用 node js 的新手

这里是代码:

    var data = { id: user.id_panel_users, username: user.username, role: user.role, groups: user.groups }
    var [group] = await modelGroup.getUserGroup(data.id)

    for(let i=0;i<group.length;i++){
        data.groups = group[i].group_name;
    }


    console.log(group, data.groups)
    // data.toString();
    console.log("serialize user: ", data)
    done(null, data);

结果如下:

[
  TextRow { group_name: 'add_url_premium' },
  TextRow { group_name: 'add_url_regular' }
] add_url_regular
serialize user:  {
  id: 77,
  username: '082122735123',
  role: 2,
  groups: 'add_url_regular'
}

【问题讨论】:

  • data.groups 是什么数据结构?如果是数组,你应该往里面推值,它应该可以工作。
  • @LuckyLuke data.groups 是数据对象的一个​​属性。它是 passport.serializeUser 中的一个对象,用于显示用户的所有数据
  • 当您调用await modelGroup.getUserGroup(data.id) 时,它是返回一个数组数组,还是只返回一个数组?当您使用var [group] = ... 时,您希望右侧返回一个包含单个值的数组,并将该值分配给group 变量。这可能是问题的另一个根源。
  • @BillyBrown [ TextRow { group_name: 'add_url_premium' }, TextRow { group_name: 'add_url_regular' } ] 这个是 var [group] = await ...

标签: javascript arrays node.js object


【解决方案1】:

data.groups 必须是 array。您正在做的不是将group_name 附加到data.groups,而是将字符串分配给它。所以,而不是:

for(let i=0;i<group.length;i++){
    data.groups = group[i].group_name;
}

你应该使用:

for(let i=0;i<group.length;i++){
    data.groups.push(group[i].group_name);
}

另外,var 是一种在 javascript 中声明变量的旧方法。如果您是新手,我建议您使用let/const

【讨论】:

    【解决方案2】:

    我能看到的主要问题是在for 循环中:

    for (let i = 0; i < group.length; i++) {
        data.groups = group[i].group_name;
    }
    

    每次,您都将组名分配给data.groups 字段。这会将类型从 array 更改为 string,并且每次都会覆盖之前的值。

    您应该改用Array.prototype.push 函数将组添加到数组的末尾:

    for (let i = 0; i < group.length; i++) {
        data.groups.push(group[i].group_name);
    }
    

    使用map 函数有一种更简洁的方法:它循环遍历一个数组并对每个项目应用一个函数,用函数返回的值替换数组中的那个项目。在您的情况下,您的代码将变为:

    let data = { id: user.id_panel_users, username: user.username, role: user.role, groups: user.groups }
    let [group] = await modelGroup.getUserGroup(data.id);
    data.groups = group.map(g => g.group_name);
    

    我还建议您在所有语句的末尾使用分号;,并且在使用let/constvar 时尽量保持一致。

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 2017-06-24
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2017-04-22
      • 2022-11-11
      相关资源
      最近更新 更多