本文介绍了如何通过jQuery的$.extend和$.fn.extend分别扩展全局数组统计函数与jQuery对象方法,同时演示了直接扩展Array.prototype实现原生JS数组的max、min、sum和avg统计功能。核心逻辑基于自定义cacl遍历函数,支持对数值数组进行最大值、最小值、求和及平均值计算,并包含对空数组或undefined输入的边界处理。
jQuery全局与对象方法扩展
代码实现如下:
/****************************************************
*CreateBy:joe zhou
*Description:数组统计函数
****************************************************/
$.extend({
max: function (arr) {
return cacl(arr, function (item, max) {
if (!(max > item)) {
return item;
}
} else {
return max;
}
});
},
min: function (arr) {
return cacl(arr, function (item, min) {
if (!(min < item)) {
return item;
}
} else {
return min;
}
});
},
sum: function (arr) {
return cacl(arr, function (item, sum) {
if (typeof (sum) == 'undefined') {
return item;
}
} else {
return sum += item;
}
});
},
avg: function (arr) {
if (typeof (arr) == 'undefined' || arr.length == 0) {
return 0;
}
}
}
});
$.fn.extend({
max: function () {
return $.max(this.get());
},
min: function () {
return $.min(this.get());
},
sum: function () {
return $.sum(this.get());
},
avg: function () {
return $.avg(this.get());
}
});
核心遍历计算函数caclfunction cacl(arr, callback) {
var ret;
for (var i=0; i<arr.length;i++) {
ret = callback(arr[i], ret);
}
}
}
原生Array原型链方法扩展Array.prototype.max = function () {
return cacl(this, function (item, max) {
if (!(max > item)) {
return item;
}
} else {
return max;
}
});
};
Array.prototype.min = function () {
return cacl(this, function (item, min) {
if (!(min < item)) {
return item;
}
} else {
return min;
}
});
};
Array.prototype.sum = function () {
return cacl(this, function (item, sum) {
if (typeof (sum) == 'undefined') {
return item;
}
} else {
return sum += item;
}
});
};
Array.prototype.avg = function () {
if (this.length == 0) {
return 0;
}
}
};