2012-01-19 32 views
0

我有一個包含對象的數組。每個對象都有一個id字段。我想實現一個通過指定id來刪除一個對象的函數。我使用.each從數組的prototypejs中遍歷對象並檢查id。如果匹配,我該如何刪除它?我已經嘗試將.each返回的對象設置爲null,但使用FireBug,我發現該對象在數組中仍然是相同的。如何刪除每個枚舉器返回的元素?

編輯:數組中的對象可能反過來包含與可能需要刪除的對象的數組。我的功能很好找到要刪除的對象,並使用拼接刪除它(使用計數器)。在我看來,.each(和其他枚舉類似.reject)返回對象的副本。如果我將對象設置爲null,那麼在檢查時對象仍然在數組中。我如何返回一個對象的引用,當設置爲null時,它實際上對數組中的對象進行操作,而不是副本?

下面是函數,該函數DeleteChild,則工作在相同的原理:

function removeControl(controlName) { 
var counter = 0; 

cont.each(function (existingControl) { 
    if (existingControl.id == controlName) { 
     existingControl.destroy(); 
     cont.splice(counter, 1); 
    } 
    else { // not found, check control's children 
     existingControl.deleteChild(controlName); 
    } 
    counter++; 
}, this); 

}

回答

0

,當你想要做的事,對每個對象只能使用.each。從語義上講,你應該在這種情況下使用Enumerable.reject。想想多少時間才能理解你何時需要修復它。

function deleteById(objects, id) { 
    return objects.reject(function(obj) { 
     return obj.id == id; 
    }).each(function(obj) { 
     obj.deleteChild(id); 
    }); 
} 
+0

在我看來,你的函數返回所有與id不匹配的對象。你是否打算返回用於替換當前數組的數組?在我的實現中,對象本身可能有對象數組。我會編輯我的問題來澄清。 –

+0

是的,這是我的意圖。或者你可以使它成爲'Array.prototype'的一種方法,並以鏈接的方式使用它。 – clockworkgeek