解决遍历时Array.indexOf产生的性能问题
复制代码代码如下:分机。applyif(数组。原型,{ /** *检查数组中是否存在指定的对象* @param {Object} o要从中检查* @param {Number}的对象(可选)开始搜索的索引* @返回{数字}数组中o的索引(如果找不到,则返回-1)*/indexOf :函数(o,from){ var len=this。透镜;from=from | | 0;from=(从0开始)?len : 0;for(;来自len from){ if(this[from]===o){ return from;} });返回-1;} 从源码可以看出,查找是简单的线性查找。由于线性查找效率是O(n),所以,在数据量稍大的时候,需要寻找替代排列的办法。有很多文章说过关于排列的这个问题,包括《权威指南》 ,办法是模拟一个混杂表。下面是有问题的代码复制代码代码如下: var hostsIP=[];Ext.each(_this.hosts),function(item){ host sip。推送(项目。IP);});延伸文件系统每个(TxTossIP,函数(IP){ if(HostSip。indexof(IP)===-1){//问题代码var host={ isAppend : true,//新增的主机isAgentOk :假,IP : IP };_这个。主持人。按压(外部)。应用(主机,此).MAPPING _ FILERS));isAppend=true } else { errors . push(' IP[' IP ']已存在');} });当主机啜饮长度超过2000个时,IE8-浏览器会出现如下提示
按照《权威指南》 中给出的提示,我对代码做了如下修改后,问题解决。复制代码代码如下: var hostsIP={ };Ext.each(_this.hosts),function(item){ HostSip[item。IP]=项目。知识产权;});延伸文件系统每个(TxTossIP,函数(ip){ if(!主机sip。hasown属性(IP)){ var host={ isAppend : true,//新增的主机isAgentOk :假,IP : IP };_这个。主持人。按压(外部)。应用(主机,此).MAPPING _ FILERS));isAppend=true } else { errors . push(' IP[' IP ']已存在');} });
版权声明:解决遍历时Array.indexOf产生的性能问题是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。