Функция filter для массива

Функция filter выполняет переданную ей в качестве аргумента функцию для всех элементов массива и возвращает массив элементов, для которых функция вернула true. Она добавлена в стандарт JavaScript 1.6 core, однако большинство браузеров используют 1.5 core, следовательно эта функция для них недоступна. Самостоятельно создать эту функцию для класса Array можно следующим способом:

if ( !Array.prototype.filter ) {
	Array.method('filter', function(fn, thisObj) {
		var scope = thisObj || window;
		var a = [];
		for ( var i = 0, len = this.length; i < len; ++i ) {
			if ( !fn.call(scope, this[i], i, this) ) {
				continue;
			}
			a.push(this[i]);
		}
		return a;
	});
}

В начале мы проверяем, объявлена ли эта функция в классе Array. Если нет, то добавляем её туда используя свойство prototype. Созданная функция принимает два аргумента: функцию-callback, которую нужно выполнять для каждого элемента массива и ссылку на объект, в контексте которого этот callback будет выполняться. В callback в свою очередь передаются три аргумента: текущий элемент массива, счетчик и ссылка на массив.

Пример

Выделение из массива всех строк:

var aList = [1, 3, "some string", true, "string two", null, false];
var res = aList.filter(function(value) {
	if(value && value.constructor == String)
		return true;
});
// массив res теперь содержит 2 элемента "some string" и "string two"
Maklay.com - Большой каталог товаров для спорта и активного отдыха

JSToolbox создан на основе WordPress