У меня есть массив, содержащий объекты. Каждый объект имеет поле id. Я хочу реализовать функцию, которая удаляет объект, указав идентификатор. Я использую .each от prototypejs в массиве, чтобы проходить через объекты и проверять идентификатор. Если это соответствует, как я могу удалить его? Я попытался установить объект, возвращенный с .each на null, но с использованием FireBug я вижу, что объект все тот же в массиве.Как удалить элемент, возвращаемый из каждого перечислителя?
EDIT: объекты в массиве, в свою очередь, могут содержать массивы с объектами, которые могут быть удалены. Моя функция отлично подходит для поиска объекта, который нужно удалить, и я использую сплайсинг, чтобы удалить его (используя счетчик). Мне кажется, что .each (и другие перечисления вроде .reject) возвращает копию объекта. Если я установил объект в значение 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);
}
Мне кажется, что ваша функция возвращает все объекты, которые не совпадают с идентификатором. Вы хотите, чтобы возвращаемый массив использовался для замены текущего массива? В моей реализации объекты могут иметь массивы самих объектов. Я отредактирую свой вопрос, чтобы уточнить. –
Да, это то, что я намеревался. Или вы можете сделать его методом «Array.prototype» и использовать его цепным образом. – clockworkgeek