-
-
Notifications
You must be signed in to change notification settings - Fork 184
Expand file tree
/
Copy pathArraySlice.ts
More file actions
40 lines (36 loc) · 804 Bytes
/
ArraySlice.ts
File metadata and controls
40 lines (36 loc) · 804 Bytes
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
// https://www.ecma-international.org/ecma-262/9.0/index.html#sec-array.prototype.slice
export function __TS__ArraySlice<T>(this: T[], first?: number, last?: number): T[] {
const len = this.length;
first = first ?? 0;
if (first < 0) {
first = len + first;
if (first < 0) {
first = 0;
}
} else {
if (first > len) {
first = len;
}
}
last = last ?? len;
if (last < 0) {
last = len + last;
if (last < 0) {
last = 0;
}
} else {
if (last > len) {
last = len;
}
}
const out = [];
first++;
last++;
let n = 1;
while (first < last) {
out[n - 1] = this[first - 1];
first++;
n++;
}
return out;
}