現在、2 つの for ループを実行しており、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);
}
}
}