我有幾個JavaScript數組,每個數組都包含一個指向對象的指針列表。當一個對象滿足某個條件時,它的指針必須從當前包含的數組中移除並放入一個不同的數組中。在陣列之間高效地傳輸元素
我目前的(天真的)解決方案是splice
out退出陣列元素和concat
將它們加入他們正在進入的數組。這是一個緩慢的方法,似乎隨着時間的推移將內存碎片化。
任何人都可以提供建議(一般或JS特定)在更好的方式來做到這一點?
示範代碼:
// Definitions
TestObject = function() {
this.shouldSwitch = function() {
return(Math.random() > 0.9);
}
}
A = [];
B = [];
while(A.length < 500) {
A.push(new TestObject());
}
// Transfer loop
doTransfers = function() {
var A_pending = [];
var B_pending = [];
for(var i = 0; i < A.length; i++) {
if(A[i].shouldSwitch()) {
B_pending.push(A[i]);
A.splice(i,1);
i--;
}
}
for(var i = 0; i < B.length; i++) {
if(B[i].shouldSwitch()) {
A_pending.push(B[i]);
B.splice(i,1);
i--;
}
}
A = A.concat(A_pending);
B = B.concat(B_pending);
}
setInterval(doTransfers,10);
謝謝!
是的,你絕對不應該在循環中使用'splice'。但是,既然你正在創建新的數組,你可以簡單地不刪除它,而是馬上推到新的'* _pending'。 – Bergi