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

时间:2017-06-02 12:45:19

标签: javascript arrays node.js mongoose

我试图遍历数组以检查它是否包含任何传递指定函数的项目。我这样做是通过向Array对象添加.any()原型:

tbody

然后调用Array.any(),如:

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

然而,这给了我以下错误:

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

在我看来,这个错误就像它暗示着这个'在原型函数中是未定义的,但是这个'是我检查过undefined的用户数组。

不确定究竟是什么导致了这个问题,希望你能提供帮助。

2 个答案:

答案 0 :(得分:2)

这里唯一的答案是您没有使用“函数”,因此您的“此”不是您的“用户”。这会起作用:

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

然后,当然,只需使用“ some”。

答案 1 :(得分:0)

使用Array.prototype.any()是不必要的,因为我使用mongoose来获取用户,因此我将其更改为让mongoose尝试获取具有受控用户名的单个用户并检查是否已定义。喜欢:

const checkUniqueUserName = (user, res, done) => {
    User.findOne({"userName": user.userName}, (err, foundUser) => {
        if(err){
            res.sendStatus(500);
            console.log(err);
        }

        else if(foundUser){
            res.status(400).send('Username already in use');
        }

        else{
            done(user);
        }
    });
};