【发布时间】:2017-11-03 21:19:20
【问题描述】:
我正在尝试遍历一个数组以检查它是否包含通过指定函数的任何项目。我通过向 Array 对象添加一个 .any() 原型来做到这一点:
Array.prototype.any = (comparator) => {
for(let item of this){
if(comparator(item)){
return true;
}
}
return false;
};
然后像这样调用 Array.any():
else if(users && users.any((user) => user.userName === user.userName)){
res.status(400).send('Username already in use');
}
然而,这给了我以下错误:
TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
at Array.any (C:\dev\nodejs\testproject\dist\routes\userRoutes.js:29:39)
at C:\dev\nodejs\testproject\dist\routes\userRoutes.js:87:56
at Query.<anonymous> (C:\dev\nodejs\testproject\node_modules\mongoose\lib\model.js:3748:16)
at C:\dev\nodejs\testproject\node_modules\kareem\index.js:277:21
at C:\dev\nodejs\testproject\node_modules\kareem\index.js:131:16
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
在我看来,错误提示原型函数中的“this”未定义,但“this”是我检查未定义的用户数组。
不确定是什么导致了问题,希望您能提供帮助。
【问题讨论】:
-
什么是“用户”?它似乎不是一个数组,而是来自 mongoose 的
Query对象。我认为你做了类似var users = User.find({})的事情。是吗? -
user.userName === user.userName: 你真的是这个意思吗? -
你可能是正确的这里“用户”确实来自猫鼬
-
另外,你不能用
Array.prototype.some()吗? -
@IdsvanderZee 请将其添加为answer 然后,而不是通过编辑您的问题 - 这完全使错误消息无效。
标签: javascript arrays node.js mongoose