处理此问题的最佳方法是什么? 考虑我正在处理注册列表数据库,我想知道用户是否已经存在相同的用户名?
类似的东西:
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功能,但它没有帮助。
答案 0 :(得分:1)
在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
也适用)
注意,这个答案使用ES6格式表示lambda表达式,不支持的浏览器中的等价物是
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;
答案 1 :(得分:1)
即使索引0处的项与您的查询匹配,您的代码也会一直遍及整个数组。您可以使用Array.prototype.some
但与Array.prototype.findIndex
相比,即使是那个也会达不到性能。所以我的建议是使用findIndex。
database.user.findIndex(e => e.username === username) === -1 && login(username);