我正在开展一个项目,我需要从一个巨大的用户数据列表中提取被排除用户的列表.这让我想知道在数组中使用带有排除id的double for循环是否更快.或者,如果将id放在对象属性中并使用.hasOwnProperty()更快.
var mainList = LARGE JSON OBJECT OF DATA.
var eArray = ["123456","234567","345678","456789","012345"];
var eObject = {"123456":"0","234567":"0","345678":"0","456789":"0","012345":"0"};
使用Double For Loop方法:
for(i=0; i < mainList.length; i++){
for(j=0; j < eArray.length; j++){
if(mainList[i]['id'] === eArray[j]){
//Do Something
}
}
}
使用.hasOwnProperty()方法:
for(i=0; i < mainList.length; i++){
if(eObject.hasOwnProperty(mainList[i]['id'])){
//Do Something
}
}
我意识到还有其他方法可以使循环更快,比如在变量中存储长度.我试图简化这个.
感谢您提供任何信息.
最佳答案
如果你考虑一下,那么.hasOwnProperty()方法会更快,因为它只使用1 for循环.
我其实有点惊讶.我期待双循环更慢.但我想你无法估计for循环的速度.
双循环
虽然这对我来说似乎是最慢的,但这实际上最终成为7,291,083次/秒的最快成长
.hasOwnProperty()
我可以看到这会慢,因为函数比语句慢.这个长度为1,730,588次/秒
if..in
@Geuis回答包括if..in语句,并认为我会测试速度似乎最快但是在2,715,091 ops / sec的长度仍然没有击败for循环.
结论
For循环很快.双循环运行速度比使用.hasOwnProperty()快4倍,比使用if..in条件快3倍.但是,表现并不明显;所以速度真的非常重要,你需要使事情复杂化.在我看来,if..in方法是要走的路.
在您的浏览器中Test this yourself.我使用的是Google Chrome 28.
更新
重要的是要注意使用for..in声明将为您提供最佳性能.