繁体   English   中英

如何检查数组是否包含Javascript中具有相同字段的对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM