我有一个包含对象的数组。每个对象都有一个id字段。我想实现一个通过指定id删除对象的函数。我使用来自数组上的prototypejs的.each来逐步检查对象并检查id。如果匹配,我该如何删除它?我已经尝试将从.each返回的对象设置为null,但是使用FireBug我发现对象在数组中仍然是相同的。
编辑:数组中的对象可能反过来包含可能需要删除的对象的数组。我的函数可以很好地找到要删除的对象,我使用splice删除它(使用计数器)。在我看来,.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 :(得分:0)
当您想对每个对象执行某些操作时,仅使用.each
。从语义上讲,在这种情况下你应该使用Enumerable.reject
。想想当你需要多年修复它时,理解它会变得多么容易。时间。
function deleteById(objects, id) {
return objects.reject(function(obj) {
return obj.id == id;
}).each(function(obj) {
obj.deleteChild(id);
});
}