Skip to content

Commit bef9e39

Browse files
committed
Improved 3 functions
1 parent 61067f3 commit bef9e39

File tree

3 files changed

+158
-61
lines changed

3 files changed

+158
-61
lines changed

functions/math/max.js

Lines changed: 78 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
function max() {
22
// http://kevin.vanzonneveld.net
33
// + original by: Onno Marsman
4+
// + revised by: Onno Marsman
45
// % note: Long code cause we're aiming for maximum PHP compatibility
56
// % note: Example 3 doesn't give the expected output yet
67
// * example 1: max(1, 3, 5, 6, 7);
@@ -16,42 +17,89 @@ function max() {
1617
// * example 6: max([2, 4, 8], [2, 5, 7]);
1718
// * returns 6: [2, 5, 7]
1819

19-
var ar, retVal = -Infinity;
20+
var ar, retVal, i=0;
21+
22+
var _obj2Array = function(obj) {
23+
if (obj instanceof Array) {
24+
return obj;
25+
} else {
26+
var ar = [];
27+
for (var i in obj) {
28+
ar.push(obj[i]);
29+
}
30+
return ar;
31+
}
32+
}
33+
34+
var _compare = function(current, next) {
35+
if (current===next) {
36+
return 0;
37+
} else if (typeof current == 'object') {
38+
if (typeof next == 'object') {
39+
current = _obj2Array(current);
40+
next = _obj2Array(next);
41+
if (next.length>current.length) {
42+
return 1;
43+
} else if (next.length<current.length) {
44+
return -1;
45+
} else {
46+
var tmp;
47+
for (var i=0, n=current.length; i<n; ++i) {
48+
tmp = _compare(current[i], next[i]);
49+
if (tmp==1) {
50+
return 1;
51+
} else if (tmp==-1) {
52+
return -1;
53+
}
54+
}
55+
return 0;
56+
}
57+
} else {
58+
return -1;
59+
}
60+
} else if (typeof next == 'object') {
61+
return 1;
62+
} else if (isNaN(next) && !isNaN(current)) {
63+
if (current==0) {
64+
return 0;
65+
} else {
66+
return (current<0 ? 1 : -1);
67+
}
68+
} else if (isNaN(current) && !isNaN(next)) {
69+
if (next==0) {
70+
return 0;
71+
} else {
72+
return (next>0 ? 1 : -1);
73+
}
74+
} else {
75+
if (next==current) {
76+
return 0;
77+
} else {
78+
return (next>current ? 1 : -1);
79+
}
80+
}
81+
}
2082

21-
if (arguments.length == 0) {
22-
throw new Error('Atleast one value should be passed to max()');
23-
} else if (arguments.length == 1) {
24-
if (arguments[0] instanceof Array) {
25-
ar = arguments[0];
26-
} else if (typeof arguments[0] == 'object') {
27-
ar = [];
28-
for (var i in arguments[0]) {
29-
ar.push(ar[i]);
30-
}
31-
} else {
32-
throw new Error('Wrong parameter count for max()');
33-
}
34-
if (ar.length==0) {
35-
throw new Error('Array must contain at least one element for max()');
36-
}
83+
if (arguments.length==0) {
84+
throw new Error('At least one value should be passed to max()');
85+
} else if (arguments.length==1) {
86+
if (typeof arguments[0]=='object') {
87+
ar = _obj2Array(arguments[0]);
88+
} else {
89+
throw new Error('Wrong parameter count for max()');
90+
}
91+
if (ar.length==0) {
92+
throw new Error('Array must contain at least one element for max()');
93+
}
3794
} else {
3895
ar = arguments;
3996
}
4097

41-
for (var i=0, n=ar.length; i<n; ++i) {
42-
if (retVal==Infinity) {
43-
retVal = ar[i];
44-
} else if (isNaN(ar[i]) && !isNaN(retVal)) {
45-
if (retVal<=0) {
46-
retVal = ar[i];
47-
}
48-
} else if (isNaN(retVal) && !isNaN(ar[i])) {
49-
if (ar[i]>0) {
50-
retVal = ar[i];
51-
}
52-
} else if (ar[i]>retVal) {
98+
retVal = ar[0];
99+
for (i=1, n=ar.length; i<n; ++i) {
100+
if (_compare(retVal, ar[i])==1) {
53101
retVal = ar[i];
54-
}
102+
}
55103
}
56104

57105
return retVal;

functions/math/min.js

Lines changed: 78 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
function min() {
22
// http://kevin.vanzonneveld.net
33
// + original by: Onno Marsman
4+
// + revised by: Onno Marsman
45
// % note: Long code cause we're aiming for maximum PHP compatibility
56
// % note: Example 3 doesn't give the expected output yet
67
// * example 1: min(1, 3, 5, 6, 7);
@@ -15,44 +16,91 @@ function min() {
1516
// * returns 5: -1
1617
// * example 6: min([2, 4, 8], [2, 5, 7]);
1718
// * returns 6: [2, 4, 8]
19+
20+
var ar, retVal, i=0;
1821

19-
var ar, retVal = Infinity;
20-
21-
if (arguments.length == 0) {
22-
throw new Error('Atleast one value should be passed to min()');
23-
} else if (arguments.length==1) {
24-
if (arguments[0] instanceof Array) {
25-
ar = arguments[0];
26-
} else if (typeof arguments[0]=='object') {
27-
ar = [];
28-
for (var i in arguments[0]) {
29-
ar.push(ar[i]);
22+
function _obj2Array(obj) {
23+
if (obj instanceof Array) {
24+
return obj;
25+
} else {
26+
var ar = [];
27+
for (var i in obj) {
28+
ar.push(obj[i]);
29+
}
30+
return ar;
31+
}
32+
} //function _obj2Array
33+
34+
function _compare(current, next) {
35+
if (current===next) {
36+
return 0;
37+
} else if (typeof current == 'object') {
38+
if (typeof next == 'object') {
39+
current = _obj2Array(current);
40+
next = _obj2Array(next);
41+
if (next.length>current.length) {
42+
return 1;
43+
} else if (next.length<current.length) {
44+
return -1;
45+
} else {
46+
var tmp;
47+
for (var i=0, n=current.length; i<n; ++i) {
48+
tmp = _compare(current[i], next[i]);
49+
if (tmp==1) {
50+
return 1;
51+
} else if (tmp==-1) {
52+
return -1;
53+
}
54+
}
55+
return 0;
56+
}
57+
} else {
58+
return -1;
59+
}
60+
} else if (typeof next == 'object') {
61+
return 1;
62+
} else if (isNaN(next) && !isNaN(current)) {
63+
if (current==0) {
64+
return 0;
65+
} else {
66+
return (current<0 ? 1 : -1);
67+
}
68+
} else if (isNaN(current) && !isNaN(next)) {
69+
if (next==0) {
70+
return 0;
71+
} else {
72+
return (next>0 ? 1 : -1);
3073
}
74+
} else {
75+
if (next==current) {
76+
return 0;
77+
} else {
78+
return (next>current ? 1 : -1);
79+
}
80+
}
81+
} //function _compare
82+
83+
if (arguments.length==0) {
84+
throw new Error('At least one value should be passed to min()');
85+
} else if (arguments.length==1) {
86+
if (typeof arguments[0]=='object') {
87+
ar = _obj2Array(arguments[0]);
3188
} else {
3289
throw new Error('Wrong parameter count for min()');
3390
}
3491
if (ar.length==0) {
3592
throw new Error('Array must contain at least one element for min()');
3693
}
37-
} else {
94+
} else {
3895
ar = arguments;
39-
}
40-
41-
for (var i=0, n=ar.length; i<n; ++i) {
42-
if (retVal==Infinity) {
43-
retVal = ar[i];
44-
} else if (isNaN(ar[i]) && !isNaN(retVal)) {
45-
if (retVal>=0) {
46-
retVal = ar[i];
47-
}
48-
} else if (isNaN(retVal) && !isNaN(ar[i])) {
49-
if (ar[i]<0) {
50-
retVal = ar[i];
51-
}
52-
} else if (ar[i]<retVal) {
96+
}
97+
98+
retVal = ar[0];
99+
for (i=1, n=ar.length; i<n; ++i) {
100+
if (_compare(retVal, ar[i])==-1) {
53101
retVal = ar[i];
54102
}
55-
}
56-
57-
return retVal;
58-
}
103+
}
104+
105+
return retVal;
106+
}

functions/strings/htmlentities.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ function htmlentities( string ){
22
// http://kevin.vanzonneveld.net
33
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
44
// + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
5+
// + improved by: nobbler
56
// % note: table from http://www.the-art-of-web.com/html/character-codes/
67
// * example 1: htmlentities('Kevin & van Zonneveld');
78
// * returns 1: 'Kevin &amp; van Zonneveld'
89

9-
var histogram = {}, code = 0, tmp_arr = [];
10+
var histogram = {}, code = 0, tmp_arr = [], i = 0;
1011

1112
histogram['34'] = 'quot';
1213
histogram['38'] = 'amp';

0 commit comments

Comments
 (0)