无法读取未定义的属性“ Symbol(Symbol.iterator)”

Ids*_*Zee 6 javascript arrays mongoose node.js

我试图遍历一个数组,以检查它是否包含通过指定函数的任何项目。为此,我向Array对象添加了.any()原型:

Array.prototype.any = (comparator) => {
    for(let item of this){
        if(comparator(item)){
            return true;
        }
    }
    return false;
};
Run Code Online (Sandbox Code Playgroud)

然后像这样调用Array.any():

else if(users && users.any((user) => user.userName === user.userName)){
        res.status(400).send('Username already in use');
}
Run Code Online (Sandbox Code Playgroud)

但是,这给了我以下错误:

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)
Run Code Online (Sandbox Code Playgroud)

在我看来,该错误似乎表明原型函数中的“ this”未定义,但“ this”是我检查未定义的users数组。

不太确定是什么真正导致了问题,希望您能提供帮助。

Shl*_*Shl 5

这里唯一的答案是你没有使用“功能”,所以你的“这个”不是你的“用户”。这会起作用:

Array.prototype.any = function(comparator) {
    for(let item of this){
        if(comparator(item)){
            return true;
        }
    }
    return false;
};
Run Code Online (Sandbox Code Playgroud)

然后,当然,就用“一些”。