UNPKG

@extra-array/left-update

Version:
60 lines (53 loc) 1.22 kB
'use strict'; /** * 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 left. * @param x an array (updated) * @param n number of values (1) * @returns x */ function left$(x, n = 1) { return slice$(x, 0, n); } module.exports = left$;