В http://bugs.jquery.com/ticket/1886 становится очевидным, что разработчики JQuery имеют серьезные психические проблемы рег. функциональное программирование вдохновило дополнения. Как-то хорошо иметь некоторые фундаментальные вещи (например, карту), но не другие (например, уменьшить), если только это не уменьшит общий размер файла jQuery. Идите фигуру.
Услужливо, кто-то поставил код, чтобы использовать обычную функцию уменьшения для JQuery массивов:
$ .fn.reduce = [] .reduce;
Теперь мы можем использовать простой уменьшить функцию для создания суммирования:
//where X is a jQuery array
X.reduce(function(a,b){ return a + b; });
// (change "a" into parseFloat("a") if the first a is a string)
Наконец, некоторые старые браузеры до сих пор не реализованы сократить, polyfill могут быть взяты из MDN (это большой, но Я предполагаю, что это имеет точно такое же поведение, что желательно):
if ('function' !== typeof Array.prototype.reduce) {
Array.prototype.reduce = function(callback /*, initialValue*/) {
'use strict';
if (null === this || 'undefined' === typeof this) {
throw new TypeError(
'Array.prototype.reduce called on null or undefined');
}
if ('function' !== typeof callback) {
throw new TypeError(callback + ' is not a function');
}
var t = Object(this), len = t.length >>> 0, k = 0, value;
if (arguments.length >= 2) {
value = arguments[1];
} else {
while (k < len && ! k in t) k++;
if (k >= len)
throw new TypeError('Reduce of empty array with no initial value');
value = t[ k++ ];
}
for (; k < len ; k++) {
if (k in t) {
value = callback(value, t[k], k, t);
}
}
return value;
};
}
весьма полезным благодаря маркировать –
Вы не должны использовать 'для (х в SomeArray)' с массивами, так как он перечисляет перечисляемые свойства массива, а не только элементы массива. Вы должны использовать 'for (var i = 0; i
jfriend00
@ jfriend00: Спасибо! Починил это. –