@extra-array/right-update
Version:
Gets values from the right.
60 lines (53 loc) • 1.23 kB
JavaScript
;
/**
* Gets zero-based index.
* @param x an array
* @param i index (-ve: from right) (0)
*/
function index(x, i = 0) {
return i < 0 ? Math.max(x.length + i, 0) : Math.min(i, x.length);
}
/**
* Gets index range of part of array.
* @param x an array
* @param i start index (-ve: from right) (0)
* @param I end index (-ve: from right) (X)
* @returns [start index, end index]
*/
function indexRange(x, i = 0, I = x.length) {
i = index(x, i);
I = Math.max(i, index(x, I));
return [i, I];
}
/**
* Counts the number of values.
* @param x an array
* @param i start index (-ve: from right) (0)
* @param I end index (-ve: from right) (X)
*/
function size(x, i = 0, I = x.length) {
var [i, I] = indexRange(x, i, I);
return I - i;
}
/**
* Gets a part of array.
* @param x an array (updated)
* @param i start index (0)
* @param I end index (end)
* @returns x
*/
function slice$(x, i = 0, I = x.length) {
x.copyWithin(0, i, I);
x.length = size(x, i, I);
return x;
}
/**
* Gets values from right.
* @param x an array (updated)
* @param n number of values (1)
* @returns x
*/
function right$(x, n = 1) {
return slice$(x, x.length - n);
}
module.exports = right$;