UNPKG

1.23 kBJavaScriptView Raw
1'use strict';
2
3/**
4 * Gets zero-based index.
5 * @param x an array
6 * @param i index (-ve: from right) (0)
7 */
8function index(x, i = 0) {
9 return i < 0 ? Math.max(x.length + i, 0) : Math.min(i, x.length);
10}
11
12/**
13 * Gets index range of part of array.
14 * @param x an array
15 * @param i start index (-ve: from right) (0)
16 * @param I end index (-ve: from right) (X)
17 * @returns [start index, end index]
18 */
19function indexRange(x, i = 0, I = x.length) {
20 i = index(x, i);
21 I = Math.max(i, index(x, I));
22 return [i, I];
23}
24
25/**
26 * Counts the number of values.
27 * @param x an array
28 * @param i start index (-ve: from right) (0)
29 * @param I end index (-ve: from right) (X)
30 */
31function size(x, i = 0, I = x.length) {
32 var [i, I] = indexRange(x, i, I);
33 return I - i;
34}
35
36/**
37 * Gets a part of array.
38 * @param x an array (updated)
39 * @param i start index (0)
40 * @param I end index (end)
41 * @returns x
42 */
43function slice$(x, i = 0, I = x.length) {
44 x.copyWithin(0, i, I);
45 x.length = size(x, i, I);
46 return x;
47}
48
49/**
50 * Gets values from right.
51 * @param x an array (updated)
52 * @param n number of values (1)
53 * @returns x
54 */
55function right$(x, n = 1) {
56 return slice$(x, x.length - n);
57}
58
59module.exports = right$;