[英]How do I check if an array includes an object with the same field in Javascript?
处理此问题的最佳方法是什么? 考虑我正在处理一个注册列表数据库,我想知道一个用户是否已经存在相同的用户名?
像这样的东西:
for (var i = 0; i < database.user.length; ++i) {
if( database.user[i].username === username ) {
return true;
}
}
return false;
有更好的东西吗?
PS1:database.user是对象数组
PS2:而且我已经知道Array-> indexOf函数,并且它没有帮助。
在javascript中,执行此操作的任何其他方法都只是掩盖了一个事实,即在幕后,他们只是在完全执行您的代码已执行的操作。
例如,您可以过滤数组,并检查其长度是否>=
1
var userExists = database.user.filter(u => u.username === username).length >= 1;
它更短,并且可以说比原始版本更具可读性,但不一定是最好的,也不可能更快。
稍微好一点的是使用find
-因为这只要一个匹配元素返回,这意味着整个阵列未评估
var userExists = database.user.find(u => u.username === username) !== undefined;
( some
也是合适的)
请注意,此答案使用Lambda表达式的ES6格式,在不支持的浏览器中,等效项为
var userExists = database.user.filter(function(u) {return u.username == username;}).length >= 1
// or
var userExists = database.user.find(function(u) {return u.username == username;}) !== undefined;
即使索引0处的项目与您的查询匹配,您的代码也会遍历整个数组。 您可以使用Array.prototype.some
但即使与Array.prototype.findIndex
相比,它的性能也将不足。 所以我的建议是使用findIndex。
database.user.findIndex(e => e.username === username) === -1 && login(username);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.