Это в основном особый случай each
:
function each(a, f) {
a = a || [];
for (var i=0; i < a.length; ++i) {
f(a[i]);
}
}
хотя each
обычно реализуется как метод Array, наряду с map
, filter
и reduce
/ fold
:
Array.prototype.each = function(f) {
for (var i=0; i < this.length; ++i) {
f(this[i], i);
}
};
Array.prototype.map = function(f) {
var result = [];
for (var i=0; i < this.length; ++i) {
result[i] = f(this[i], i);
}
return result;
};
Array.prototype.map = function(keep) {
var result = [];
for (var i=0; i < this.length; ++i) {
if (keep(this[i], i)) {
result.push(this[i]);
}
}
return result;
};
Array.prototype.foldl = function(f) {
var result = this[0];
for (var i=1; i < this.length; ++i) {
result = f(result, this[i]);
}
return result;
};
Array.prototype.foldr = function(f) {
var i=this.length-1
var result = this[i];
for (--i; i >= 0; --i) {
result = f(this[i], result);
}
return result;
};
Array.prototype.reduce = Array.prototype.foldl;
Обратите внимание, что использование for (... in ...)
с массивами может вызвать проблемы, так как оно подберет свойства, определенные в массиве, в дополнение к целочисленным индексам.