I'm trying to loop through an array to check if it contains any item that passes a specified function. I do this by adding a .any() prototype to the Array object:
Array.prototype.any = (comparator) => {
for(let item of this){
if(comparator(item)){
return true;
}
}
return false;
};
Then calling Array.any() like:
else if(users && users.any((user) => user.userName === user.userName)){
res.status(400).send('Username already in use');
}
This however gives me the following error:
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)
The error seems to me like it is suggesting 'this' in the prototype function is undefined, but 'this' is the users array for which i checked for undefined.
Not realy sure what is actually causing the issue, hope you can help.
The only answer here is that you didn't use "function", so your "this" is not your "users". This would work:
Array.prototype.any = function(comparator) {
for(let item of this){
if(comparator(item)){
return true;
}
}
return false;
};
And then, of course, just use "some".
Using Array.prototype.any() was unnecesary as I was using mongoose to get the users so I changed it to have mongoose try to get a single user that has the secified username and checking if that was defined. Like:
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);
}
});
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With