如何检查数组是否包含 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 中,任何 other 这样做的方法只是隐藏了一个事实,即在幕后,它们只是在做您的代码已经做的事情。

例如,您可以过滤您的数组,并检查它的长度是否为 >= 1

var userExists = database.user.filter(u => u.username === username).length >= 1;

它比你原来的更短,而且可以说更具可读性,但它不一定是最好的,而且也不会更快。

使用 find 稍微好一些 - 因为这个 returns 一旦元素匹配,这意味着不评估整个数组

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 相比,即使是 Array.prototype.some 也会在性能上有所下降。所以我的建议是使用 findIndex.

database.user.findIndex(e => e.username === username) === -1 && login(username);