json 如何合并数组中的多个对象(键值对)?

iqxoj9l9  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(80)

我正在尝试从node js向EJS文件传递一个键值对。使用Mongoose进行数据检索它不起作用。

User.find({}).select('name -_id').select('username').then(
        users =>{
            let JSONobject = {};

            for(var i = 0; i < users.length; i++){
                JSONobject = Object.assign(JSONobject, users[i]);
            }
            console.log(JSON.stringify(JSONobject));
            res.render("ToDo.ejs",{UserLIst: JSONobject.username});
        }
      )

字符串
上面是我使用的代码
得到这样的东西:
console pic
我就知道会是这样

[
  { username: '[email protected]',
    username: '[email protected]',
    username: '[email protected]' }
]

bejyjqdl

bejyjqdl1#

看起来问题在于你如何构造JSON对象。你在循环的每次迭代中都要修改用户名键,这会导致最终对象有多个不同值的用户名键,当你将其传递给EJS文件时,它只接受最后一个值。
为了解决这个问题,你可以创建一个用户名数组,并将其传递给EJS文件,尝试这样做:

User.find({}).select('name username -_id').then(users => {
    const usernames = users.map(user => user.username);
    console.log(usernames); // checking the usernames here

    res.render("ToDo.ejs", { UserList: usernames });
}).catch(err => {
    // Handle error here
    console.error(err);
});

字符串

azpvetkf

azpvetkf2#

您提供的JSON结构存在语法问题,因为它多次使用相同的键。如果您希望表示具有唯一用户名的用户列表,则应该使用对象数组。

[
  { "username": "[email protected]" },
  { "username": "[email protected]" },
  { "username": "[email protected]" }
]

字符串
以下是带有数组的版本:

User.find({}).select('name -_id').select('username').then(
    users => {
        let usernames = users.map(element)=> element.username);
        res.render("ToDo.ejs",{UserLIst: usernames});
    }
)

相关问题