JS数组方法扩展
001 /****************************************************
002 *CreateBy:joe zhou
003 *CreateDate:2011-9-20
004 *Description:数组统计函数
005 ****************************************************/
006 $.extend({
007 max: function (arr) {
008 return cacl(arr, function (item, max) {
009 if (!(max > item)) {
010 return item;
011 }
012 else {
013 return max;
014 }
015 });
016 },
017 min: function (arr) {
018 return cacl(arr, function (item, min) {
019 if (!(min < item)) {
020 return item;
021 }
022 else {
023 return min;
024 }
025 });
026 },
027 sum: function (arr) {
028 return cacl(arr, function (item, sum) {
029 if (typeof (sum) == 'undefined') {
030 return item;
031 }
032 else {
033 return sum += item;
034 }
035 });
036 },
037 avg: function (arr) {
038 if (typeof (arr) == 'undefined' || arr.length == 0) {
039 return 0;
040 }
041 return this.sum(arr) / arr.length;
042 }
043 });
044
045 $.fn.extend({
046 max: function () {
047 return $.max(this.get());
048 },
049 min: function () {
050 return $.min(this.get());
051 },
052 sum: function () {
053 return $.sum(this.get());
054 },
055 avg: function () {
056 return $.avg(this.get());
057 }
058 });
059
060 function cacl(arr, callback) {
061 var ret;
062 for (var i=0; i<arr.length;i++) {
063 ret = callback(arr[i], ret);
064 }
065 return ret;
066 }
067
068 Array.prototype.max = function () {
069 return cacl(this, function (item, max) {
070 if (!(max > item)) {
071 return item;
072 }
073 else {
074 return max;
075 }
076 });
077 };
078 Array.prototype.min = function () {
079 return cacl(this, function (item, min) {
080 if (!(min < item)) {
081 return item;
082 }
083 else {
084 return min;
085 }
086 });
087 };
088 Array.prototype.sum = function () {
089 return cacl(this, function (item, sum) {
090 if (typeof (sum) == 'undefined') {
091 return item;
092 }
093 else {
094 return sum += item;
095 }
096 });
097 };
098 Array.prototype.avg = function () {
099 if (typeof (this) == 'undefined' || arr.length == 0) {
100 return 0;
101 }
102 return this.sum(this) / this.length;
103 };