gpt4 book ai didi

javascript - 为什么 Array.some() 不返回 true?

转载 作者:行者123 更新时间:2023-12-02 21:56:45 25 4
gpt4 key购买 nike

我正在尝试查明用户是否已经发出请求。下面的路由器使用 Array.some() 函数来查找 userID,但它总是返回 false。

router.post('/requests/myStatus', auth, (req, res) => {
const userID = req.user
const listing = req.body.listing
try {
Listing.findOne({ _id: listing }).then(listing => {
if (listing.members.includes(userID)) {
res.status(200).send({ msg: 'Joined' })
} else if (listing.requests.some(request => request.user == userID)) {
res.status(200).send({ msg: 'Requested' })
} else {
res.status(200).send({ msg: 'Empty' })
}
})
} catch (error) {
res.status(404).send(error)
}
})

我找到所需的列表并检查ID为X的用户是否已经是成员(member),如果不是,我检查他是否已经提出了请求。

MDN console 中尝试此代码片段按预期返回 true。

const array = [ { status: 0, user: '5dd69677de9b1e3484de78af' } ];
console.log(array.some((element) => element.user == '5dd69677de9b1e3484de78af'));

上面的数组描述了我得到的实际响应。我已经记录了 userID 和 request.user 以确保它们实际上是相同的。我已经记录了请求数组、整个列表以及两者之间的所有内容。将 userID 替换为某个函数中 ID 的字符串也没有帮助。我和我的同事不知所措......

Mongoose 架构的相关部分:

const listingSchema = mongoose.Schema({
members: [{
type: mongoose.Schema.Types.ObjectId, ref: 'Profile'
}],
requests: [{
_id: false,
user: {
type: mongoose.Schema.Types.ObjectId, ref: 'Profile'
},
status: {
type: Number, // 0 - pending | 1 - accepted | 2 - declined | 3 - withdrawn | 4 - expired
default: 0
}
}]
});

任何帮助将不胜感激。预先感谢:)

编辑:根据要求,listing.requests输出:

[ { status: 0, user: 5dd69677de9b1e3484de78af } ]

编辑 2:将比较的 ID 转换为字符串解决了该问题。谢谢@Grynets

最佳答案

根据您的代码片段

[ { status: 0, user: 5dd69677de9b1e3484de78af } ]

我猜 req.user 是字符串,但您试图将字符串与 mongo _id 值进行比较,该值不是字符串类型。

也许,尝试将两个值都转换为字符串?

listing.requests.some(request => request.user.toString() == userID.toString())

当然,前提是userID确实存在

关于javascript - 为什么 Array.some() 不返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59985454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com