@extra-array/is-prefix
Version:
Checks if array starts with a prefix.
56 lines (50 loc) • 1.16 kB
JavaScript
;
/**
* 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;