-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArray.js
91 lines (80 loc) · 1.94 KB
/
Array.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
"use strict";
Object.defineProperty( Array.prototype, 'duplicate', {
value: function () {
var ret = [].concat( this );
for ( var i = ret.length - 1; i >= 0; --i ) {
var r = ret[ i ];
if ( r instanceof Object && r.duplicate instanceof Function ) {
ret[i] = r.duplicate();
}
}
return ret;
},
writable: true
} );
Object.defineProperty( Array.prototype, 'merge', {
value: Array.prototype.concat,
writable: true
} );
Object.defineProperty( Array.prototype, 'last', {
get: function () {
var i = this.length - 1;
return i >= 0 ? this[ i ] : undefined;
},
set: function ( v ) {
var i = this.length - 1;
return i >= 0 ? this[ i ] = v : this[ 0 ] = v;
}
} );
Object.defineProperty( Array.prototype, 'contains', {
value: function ( value ) {
return this.indexOf( value ) >= 0;
},
writable: true
} );
Object.defineProperty( Array.prototype, 'containsEx', {
value: function ( value ) {
return this.indexOfEx( value ) >= 0;
},
writable: true
} );
Object.defineProperty( Array.prototype, 'unique', {
value: function () {
var unique = [];
for ( var item of this ) {
if ( unique.indexOf( item ) < 0 ) {
unique.push( item );
}
}
return unique;
},
writable: true
} );
Object.defineProperty( Array.prototype, 'indexOfEx', {
value: function ( callback, offset ) {
if ( !(callback instanceof Function) ) {
return this.indexOf( callback, offset || 0 );
}
for ( var i = offset || 0, iend = this.length; i < iend; ++i ) {
if ( callback( this[ i ], i, this ) ) {
return i;
}
}
return -1;
},
writable: true
} );
Object.defineProperty( Array.prototype, 'lastIndexOfEx', {
value: function ( callback, offset ) {
if ( !(callback instanceof Function) ) {
return this.lastIndexOf( callback, offset !== undefined ? offset : this.length - 1 );
}
for ( var i = offset || this.length - 1; i >= 0; --i ) {
if ( callback( this[ i ], i, this ) ) {
return i;
}
}
return -1;
},
writable: true
} );