Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.08.2010, 23:05
Аватар для KOLANICH
Профессор
Отправить личное сообщение для KOLANICH Посмотреть профиль Найти все сообщения от KOLANICH
 
Регистрация: 22.11.2008
Сообщений: 277

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;
	}

Последний раз редактировалось KOLANICH, 01.08.2010 в 23:07.
Ответить с цитированием
  #2 (permalink)  
Старый 01.08.2010, 23:08
Любитель
Отправить личное сообщение для JsLoveR Посмотреть профиль Найти все сообщения от JsLoveR
 
Регистрация: 16.12.2009
Сообщений: 422

el=null;
Ответить с цитированием
  #3 (permalink)  
Старый 01.08.2010, 23:08
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

судя по вашему коду, el - это элемент DOM
значит и удалять его надо соответствующим образом, через removeChild

если же вы хотите удалить элементы из массива, то и удаляйте из него.
el - всего лишь ссылается на элемент в DOM
он ничего не знает о том, в какой массив вы его засунули вовне
Ответить с цитированием
  #4 (permalink)  
Старый 01.08.2010, 23:10
Аватар для KOLANICH
Профессор
Отправить личное сообщение для KOLANICH Посмотреть профиль Найти все сообщения от KOLANICH
 
Регистрация: 22.11.2008
Сообщений: 277

да, элемент дом
но мне не нужно удалять сам элемент
мне нужно удалить ссылку на него в массиве, полученном через getElemetsByTagName
короче мне нужно "профильтровать" массив

Последний раз редактировалось KOLANICH, 01.08.2010 в 23:16.
Ответить с цитированием
  #5 (permalink)  
Старый 01.08.2010, 23:54
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Почитайте здесь и узнаете, как "профильтровать" массив
Ответить с цитированием
  #6 (permalink)  
Старый 02.08.2010, 01:14
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

во-первых, из 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;
});
Ответить с цитированием
  #7 (permalink)  
Старый 02.08.2010, 12:53
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от KOLANICH
мне нужно удалить ссылку на него в массиве, полученном через getElemetsByTagName
getElementsByTagName возвращает не массив.

Сообщение от x-yuri
Во-вторых, delete предназначен для удаления свойств объектов, а не элементов массива.
Но т.к. элемент массива это такое же свойство, он таки удалится

Сообщение от x-yuri
в результате код будет выглядеть как-то так:
И вместо одного прохода два.
Ответить с цитированием
  #8 (permalink)  
Старый 02.08.2010, 15:10
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Kolyaj
Но т.к. элемент массива это такое же свойство, он таки удалится
var a = [1,2,3];
delete a[1];
alert(a);

удалится, но в результате получим разреженный массив, т.е. будут пропуски в элементах массива. Зачем делать проверки на существование элемента массива, если их можно не делать? Обычно так делают, потому что не знают, как сделать по-другому. Или когда нужен ассоциативный массив. Когда нужен разряженный массив... ничего в голову не приходит

Сообщение от Kolyaj
И вместо одного прохода два.
да, и что? Если выясниться, что это оказывает заметное влияние на производительность, всегда можно исправить
Ответить с цитированием
  #9 (permalink)  
Старый 02.08.2010, 15:15
Аватар для KOLANICH
Профессор
Отправить личное сообщение для KOLANICH Посмотреть профиль Найти все сообщения от KOLANICH
 
Регистрация: 22.11.2008
Сообщений: 277

не пашед с методом filter
пишет, что его не существует

как преобразовать объект в массив?


пс как выяснилось , массивов вообще нет, одни объекты (создал массив через new Array, взял тип - объект)
Ответить с цитированием
  #10 (permalink)  
Старый 02.08.2010, 15:16
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от x-yuri
Зачем делать проверки на существование элемента массива, если их можно не делать?
Ну когда как лучше. Если проверка на существование элемента дешевле перестановки кучи элементов, чтобы убрать дырку? Ты же в своём примере не удаляешь элементы из массива, а создаёшь новый.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Специфические функции и свойства различных браузеров onejsquestion Javascript под браузер 3 28.06.2010 10:54
Переменная как значение функции. Jurasmi Общие вопросы Javascript 7 22.04.2010 12:45
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03
Возвращение значения из функции dba Events/DOM/Window 21 06.10.2009 01:33
владелец функции diagnost Общие вопросы Javascript 6 30.10.2008 15:04