UNPKG

@extra-array/is-prefix

Version:

Checks if array starts with a prefix.

56 lines (50 loc) 1.16 kB
'use strict'; /** * Gives same value. * @param v a value * @returns v */ function id(v) { return v; } /** * Compares two values. * @param a a value * @param b another value * @returns a<b: -1, a=b: 0, a>b: 1 */ function cmp(a, b) { return a < b ? -1 : (a > b ? 1 : 0); } /** * Compares two arrays. * @param x an array * @param y another array * @param fc compare function (a, b) * @param fm map function (v, i, x) * @returns x<y: -1, x=y: 0, x>y: 1 */ function compare(x, y, fc = null, fm = null) { var fc = fc || cmp, fm = fm || id; var X = x.length, Y = y.length; for (var i = 0, I = Math.min(X, Y); i < I; i++) { var u1 = fm(x[i], i, x); var v1 = fm(y[i], i, y); var c = fc(u1, v1); if (c !== 0) return c; } return Math.sign(X - Y); } /** * Checks if array starts with a prefix. * @param x an array * @param y prefix? * @param fc compare function (a, b) * @param fm map function (v, i, x) */ function isPrefix(x, y, fc = null, fm = null) { var Y = y.length; return Y === 0 || compare(x.slice(0, Y), y, fc, fm) === 0; } module.exports = isPrefix;