【发布时间】:2019-07-30 12:05:13
【问题描述】:
我目前遇到了 JavaScript 操作的性能问题。
我想为那些 ID 已经在数组 aInvited 中或不在 aInvitationAllowed 数组中的对象清理一个对象数组 (aEmployees):
var iLength = aEmployees.length - 1;
for (var i = iLength; i >= 0; --i) {
if (aInvited.indexOf(aEmployees[i].id) !== -1 || aInvitationAllowed.indexOf(aEmployees[i].id) === -1) {
aEmployees.splice(i, 1);
}
}
您可以想象我有 Employee 对象 (aEmployees)。我还有一个已被邀请参加活动的员工 ID 列表 (aInvited) 和一个允许被邀请参加活动的员工 ID 列表 (aInvitationAllowed)。我希望所有员工因此我仍然可以邀请参加活动。
问题在于indexOf 查询的行。我必须假设数组有很多条目(~ 100,000 个条目)。那么可能是循环需要一段时间。
所以我的问题是:我怎样才能使循环更快? indexOf 有更快的替代方案吗?
感谢您的提示!
【问题讨论】:
-
理想情况下,您不要让数组接近那么大!
-
循环一次邀请数组并使用
invited[employee.id] = true创建一个数组。然后你可以检查if (invited[id]===true) {} -
@AustinTFrench 当然......但是,在这种情况下,我目前没有其他选择。
标签: javascript arrays performance loops indexof