如何检查数组是否包含 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);
什么是最好的处理方法? 假设我正在处理一个注册列表数据库,我想知道是否已经存在具有相同用户名的用户?
像这样:
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);