如何删除每个枚举器返回的元素?

时间:2012-01-19 20:51:11

标签: prototypejs

我有一个包含对象的数组。每个对象都有一个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);

}

1 个答案:

答案 0 :(得分:0)

当您想对每个对象执行某些操作时,仅使用.each。从语义上讲,在这种情况下你应该使用Enumerable.reject。想想当你需要多年修复它时,理解它会变得多么容易。时间。

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