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

标签 javascript arrays node.js mongoose

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

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)

在我看来,错误似乎是在暗示原型(prototype)函数中的“this”未定义,但“this”是我检查未定义的用户数组。

不太确定到底是什么导致了这个问题,希望您能提供帮助。

最佳答案

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

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

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

关于javascript - 无法读取未定义的属性 'Symbol(Symbol.iterator)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44329324/

相关文章:

javascript - 读取状态数组 ReactJS

javascript - 使用 Node.js 生成 .lnk Windows 快捷方式会出现 "UNKNOWN"错误

javascript - 仅在另一个脚本完成后才运行一个脚本的方法有哪些?

javascript - 如何读取本地的json文件?

javascript - 从数组中获取ID,存储它并在本地删除它

javascript - 将数组转换为 JSON

javascript - Socket.io 连接始终为 false

javascript - 在 JavaScript 中解析 MySQL 日期

javascript - 在收到来自 react 客户端的大量请求后,带有express的socket.io速度变慢

javascript - 如何在排序数组中插入值并保持数组排序?