Ext.applyIf(Array.prototype, {
/**
* 지정한 객체가 배열에 존재하는지 확인합니다.
* @param {Object} o 확인할 개체
* @param {Number} from (선택 사항) 검색을 시작할 인덱스
* @return {Number} o의 인덱스 배열(또는 찾을 수 없는 경우 -1)
*/
indexOf: function(o, from){
var len = this.length
from = from || 0
from = (for (; from < len; from){
if(this[from] === o){
return from
} ;
return -1;
}
소스 코드에서 볼 수 있듯이 검색은 간단한 선형 검색입니다.
선형 검색 효율은 O(n)이므로 데이터의 양이 조금 더 커지면 Array에 대한 대안을 찾아야 합니다. "The Definitive Guide"를 포함하여 Array의 이 문제에 대한 많은 기사가 있습니다. 이 방법은 해시 테이블을 시뮬레이션하는 것입니다.
다음은 문제가 되는 코드입니다
var 호스트IP = [];
Ext.each(_this.hosts,function(item){
hostsIP.push(item.ip);
})
Ext.each(txtHostsIP, function(ip) {
if(hostsIP.indexOf(ip)===-1){//문제 코드
var 호스트 = {
isAppend: true,//새 호스트
isAgentOk: false,
ip : ip
};
_this.hosts.push(
Ext.apply(host,_this.MAPPING_FIELDS)
); }else {
errors.push('IP[' ip '] 이미 존재함');
}
})
hostsIP 길이가 2000을 초과하는 경우, IE8- 찾아보기 장치에 다음 메시지가 표시됩니다
"The Definitive Guide"에 제공된 팁에 따라 코드를 다음과 같이 수정하여 문제가 해결되었습니다.
코드 복사
코드는 다음과 같습니다. varhostIP = {}; Ext.each (_this.hosts,function(item){
hostsIP[item.ip]=item.ip;
})
Ext.each(txtHostsIP,function(ip){
if(!hostsIP.hasOwnProperty(ip)){
var 호스트 = {
isAppend : true,//새 호스트
isAgentOk : false,
ip : ip
};
_this.hosts.push(
Ext.apply(host,_this.MAPPING_FIELDS)
)
isAppend =
}else{
errors.push('IP[ 'ip']이미 존재함');
}
});