Как удалить элемент, возвращаемый каждым перечислителем? - PullRequest
0 голосов
/ 20 января 2012

У меня есть массив, содержащий объекты.Каждый объект имеет поле идентификатора.Я хочу реализовать функцию, которая удаляет объект, указав идентификатор.Я использую .each из prototypejs в массиве для просмотра объектов и проверки идентификатора.Если оно совпадает, как я могу его удалить?Я попытался установить для объекта, возвращенного из .each, значение null, но с помощью FireBug я вижу, что объект остается неизменным в массиве.

РЕДАКТИРОВАТЬ: объекты в массиве могут, в свою очередь, содержать массивы с объектами, которые, возможно, потребуется удалить.Моя функция подходит для поиска объекта, который нужно удалить, и я использую сплайс для его удаления (используя счетчик).Мне кажется, что .each (и другие перечислители, такие как .reject) возвращают копию объекта.Если я установлю объект на ноль, то при проверке объект все еще находится в массиве.Как бы я возвратил ссылку на объект, который при значении null фактически будет работать с объектом в массиве, а не с копией?

Вот функция, функция deleteChild работает на том же принципе:1005 *

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 голосов
/ 20 января 2012

Используйте .each только когда вы хотите что-то сделать с каждым объектом.Семантически говоря, вы должны использовать Enumerable.reject в этой ситуации.Подумайте, насколько легче будет понять, когда вам придется исправлять это через годы.

function deleteById(objects, id) {
    return objects.reject(function(obj) {
        return obj.id == id;
    }).each(function(obj) {
        obj.deleteChild(id);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...