Функция forEach выполняет переданную ей в качестве аргумента функцию для всех элементов массива. Она добавлена в стандарт JavaScript 1.6 core, однако большинство браузеров используют 1.5 core, следовательно эта функция для них недоступна. Самостоятельно создать эту функцию для класса Array можно следующим способом:
if ( !Array.prototype.forEach ) {
Array.method('forEach', function(fn, thisObj) {
var scope = thisObj || window;
for ( var i = 0, len = this.length; i < len; ++i ) {
fn.call(scope, this[i], i, this);
}
});
}
В начале мы проверяем, объявлена ли эта функция в классе Array. Если нет, то добавляем её туда используя свойство prototype. Созданная нами функция принимает два аргумента: функцию-callback, которую нужно выполнять для каждого элемента массива и ссылку на объект, в контексте которого этот callback будет выполняться. В callback в свою очередь передаются три аргумента: текущий элемент массива, счетчик и ссылка на массив.
Примеры применения.
Возведение каждого элемента массива в квадрат:
var aList = [1,2,3,4,5];
aList.forEach(function (value, counter, theArray){
return theArray[counter] = value * value;
});
// теперь aList содержит элементы 1,4,9,16,25
Суммирование всех элементов массива. Выполнение функции-аргумента в контексте объекта:
var aList = [1,2,3,4,5];
var someObject = {
sum : 0
}
aList.forEach(function (value){
this.sum += value;
}, someObject);
// теперь someObject.sum равен 15
