1
현재 2 개의 for-loops를 실행 중이며 2 개의 객체 배열을 통과하고 두 개의 목록에있는 객체로 새 배열을 생성하고 있습니다. 목록이 커지면 "스크립트 실행 중지"프롬프트가 나타납니다.대용량의 데이터를로드 할 때 "스크립트 실행 중지"를 방지하십시오.
MineGlobals.receivedData = jQuery.parseJSON(MineGlobals.receivedDataRaw);
MineGlobals.nettStasjonsListe = new Array();
var len1 = MineGlobals.nsData.length;
var len2 = MineGlobals.receivedData.Nettstasjoner.length
for (var i = 0; i < len2; i++) {
for (var j = 0; j < len1; j++) {
if (MineGlobals.receivedData.Nettstasjoner[i].Id == MineGlobals.nsData[j].Id) {
var obj = new nsObject();
obj = MineGlobals.nsData[j];
if (MineGlobals.nsData[j].Lg != 0 && MineGlobals.nsData[j].La != 0) {
MineGlobals.nettStasjonsListe.push(obj);
}
break;
}
}
}
setTimeout()으로 시도했지만 작동하지 못했습니다 ... 어떤 아이디어가 있습니까? 나는 새로운 사용자 오전부터
편집
그래서 난 내 자신의 질문에 대답 할 수는 없지만 나는 해결책을 찾을 수 있었다. associativeArray()를 사용했습니다. ID가 키 인 가장 큰 배열을 배치 한 다음 반복하여 동일한 ID를 찾습니다.
var associativeArray = {};
for (var i = 0; i < len1; i++) {
associativeArray[MineGlobals.nsData[i].Id] = MineGlobals.nsData[i];
}
for (var j = 0; j < len2; j++) {
var obj = new nsObject();
obj = associativeArray[MineGlobals.receivedData.Nettstasjoner[j].Id];
if (obj != undefined) {
if (obj.Lg != 0 && obj.La != 0) {
if (obj == null || obj == "") {
obj.Nvn = "Ikke definert";
}
if (obj.NisAdresse == null || obj.NisAdresse == "") {
obj.NisAdresse = "Ikke definert";
}
MineGlobals.nettStasjonsListe.push(obj);
}
}
}
당신은 배열을 구축하고를 두 개의 큰 배열의 산물로서? 결과 배열/행렬의 예상 크기는 바이트 단위로 무엇입니까? 문제가 메모리와 관련이 없다고 확신합니까? –
* setTimeout()으로 시도한 * ... 어떻게? 비동기 처리 대기열을 사용하는 것은이를 해결하는 한 가지 방법입니다. 아니면 웹 근로자 ... –
이것은별로 도움이되지 않을 수도 있지만 시도해 볼 수 있습니다. 루프의 경우 증분 루프를 수행하는 대신 반대 작업을 수행 할 수 있습니다. for (var j = len1; j> 0; j -)'인터프리터는 한 값을 다른 변수와 비교하는 것보다 훨씬 빠르다. 특히이 경우 두 개의 큰 for 루프가 있습니다. – tmaster