Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   delete и функции (https://javascript.ru/forum/misc/11004-delete-i-funkcii.html)

Kolyaj 02.08.2010 15:17

Цитата:

Сообщение от KOLANICH
не пашед с методом filter

Метод filter есть во всех браузерах, кроме IE.

Цитата:

Сообщение от KOLANICH
пс как выяснилось , массивов вообще нет, одни объекты (создал массив через new Array, взял тип - объект)

Массивы -- это объекты, порождаемые конструктором Array. Они называются массивами. Они есть.

x-yuri 02.08.2010 15:22

Цитата:

Сообщение от KOLANICH
не пашед с методом filter

ты мое сообщение читал?
Цитата:

Сообщение от x-yuri
В-третьих, массивы фильтруются с помощью метода filter. Здесь сказано, как использовать его кроссбраузерно.

Цитата:

Сообщение от KOLANICH
пс как выяснилось , массивов вообще нет, одни объекты (создал массив через new Array, взял тип - объект)

alert([] instanceof Array);
alert({} instanceof Array);

KOLANICH 02.08.2010 16:27

Цитата:

Сообщение от x-yuri (Сообщение 65922)
Для копирования массивов можно использовать следующую функцию (в частности работает при копировании из 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;
});

то есть надо вручную копировать?
тогда проще фильтрацию сразу в копирование вставить

x-yuri 02.08.2010 16:33

Цитата:

Сообщение от Kolyaj
Ну когда как лучше. Если проверка на существование элемента дешевле перестановки кучи элементов, чтобы убрать дырку?

как я и думал, в специфических случаях

Цитата:

Сообщение от KOLANICH
тогда проще фильтрацию сразу в копирование вставить

ну если тебе проще - вставляй

Kolyaj 03.08.2010 18:04

Цитата:

Сообщение от x-yuri
var divs = document.getElementsByTagName('div');
divs = $A(divs).filter(function(el){
return el.style.display != 'none' &&
el.type=="hidden" &&
el.style.zIndex<=-3;
});

Кстати, лучше так
var divs = document.getElementsByTagName('div');
divs = [].filter.call(divs, function(el){
    return el.style.display != 'none' &&
        el.type=="hidden" &&
        el.style.zIndex<=-3;
});


Тогда будет один проход.

рони 04.08.2010 11:45

может так ?
for (var divs = document.getElementsByTagName("div"), c = [], i = 0; i < divs.length; i++)
divs[i].style.display != "none" && divs[i].type != "hidden" && divs[i].style.zIndex > -3 && c.push(divs[i]);
divs = c;

Kolyaj 04.08.2010 11:56

рони,
это то же самое, только вместо filter руками цикл записывается.

KOLANICH 04.08.2010 15:38

function fakeCheck(els){
		var checked=[];
		for(var i=0;i<els.length;i++){
			if(els[i].style.display!='none'&&els[i].type!="hidden"&&els[i].style.zIndex>=0){
				checked.push(els[i]);
				
			}
		}
		return checked;
	}

у меня так

x-yuri 04.08.2010 21:44

рони, тогда давай уж так, зачем на полпути останавливаться? (алгоритм, кстати, тоже немного поменял)
for(var a=document.getElementsByTagName("div"),b=[],i=a.length-1;i>=0;i--)a[i].style.display!="none"&&a[i].type!="hidden"&&a[i].style.zIndex>-3&&(b[i]=a[i]);

рони 04.08.2010 22:14

x-yuri,
гмм массив с дырками от которых вроде уходили ? или я чего не понял?


Часовой пояс GMT +3, время: 14:34.