delete и функции
есть массив
я создал функкцию, которая проверяет элемент массива на условие и в зависимо от результата проверки удаляет или нет эл-т массива после прохода функцией по массиву (в цикле) все эл-ты на месте, хотя сработало условие для удаления (причём довольно много раз) function fakeCheck(el){ if(el.style.display=='none'||el.type=="hidden"||el.style.zIndex<=-3){ console.log("deleting ", el) delete el; return false; } return true; } |
el=null; |
судя по вашему коду, el - это элемент DOM
значит и удалять его надо соответствующим образом, через removeChild если же вы хотите удалить элементы из массива, то и удаляйте из него. el - всего лишь ссылается на элемент в DOM он ничего не знает о том, в какой массив вы его засунули вовне |
да, элемент дом
но мне не нужно удалять сам элемент мне нужно удалить ссылку на него в массиве, полученном через getElemetsByTagName короче мне нужно "профильтровать" массив |
Почитайте здесь и узнаете, как "профильтровать" массив:)
|
во-первых, из HTMLCollection нельзя ничего удалять. Во-вторых, delete предназначен для удаления свойств объектов, а не элементов массива. В-третьих, массивы фильтруются с помощью метода filter. Здесь сказано, как использовать его кроссбраузерно. Для копирования массивов можно использовать следующую функцию (в частности работает при копировании из HTMLCollection и arguments)
function $A(iterable){ if (iterable.item){ var l = iterable.length, array = new Array(l); while (l--) array[l] = iterable[l]; return array; } return Array.prototype.slice.call(iterable); }; в результате код будет выглядеть как-то так: var divs = document.getElementsByTagName('div'); divs = $A(divs).filter(function(el){ return el.style.display != 'none' && el.type=="hidden" && el.style.zIndex<=-3; }); |
Цитата:
Цитата:
Цитата:
|
Цитата:
var a = [1,2,3]; delete a[1]; alert(a); удалится, но в результате получим разреженный массив, т.е. будут пропуски в элементах массива. Зачем делать проверки на существование элемента массива, если их можно не делать? Обычно так делают, потому что не знают, как сделать по-другому. Или когда нужен ассоциативный массив. Когда нужен разряженный массив... ничего в голову не приходит Цитата:
|
не пашед с методом filter
пишет, что его не существует как преобразовать объект в массив? пс как выяснилось , массивов вообще нет, одни объекты (создал массив через new Array, взял тип - объект) |
Цитата:
|
Часовой пояс GMT +3, время: 04:50. |