UNPKG

@extra-array/has-infix

Version:

Checks if array contains an infix.

44 lines (43 loc) 1.08 kB
'use strict'; function id(v) { return v; } function cmp(a, b) { return a < b ? -1 : (a > b ? 1 : 0); } function from$$1(x) { return Array.isArray(x) ? x : [...x]; } function head(x, vd) { for (var v of x) return v; return vd; } function* searchInfixAll(x, y, fc, fm = null) { var fc = fc || cmp, fm = fm || id; var y1 = from$$1(y), Y = y1.length; if (Y === 0) yield 0; var y1 = y1.map(fm, null); var m = new Array(Y).fill(false); var i = -1, J = 0; for (var u of x) { var u1 = fm(u, ++i, x); for (var j = J; j > 0; j--) m[j] = m[j - 1] && fc(u1, y1[j]) === 0; m[0] = fc(u1, y1[0]) === 0; J = Math.min(J + 1, Y - 1); if (m[Y - 1]) yield i - Y + 1; } } function searchInfix(x, y, fc, fm = null) { return head(searchInfixAll(x, y, fc, fm), -1); } function hasInfix$1(x, y, fc, fm = null) { return searchInfix(x, y, fc, fm) >= 0; } function hasInfix(x, y, fc = null, fm = null) { return hasInfix$1(x, y, fc, fm); } module.exports = hasInfix;