formsquare
Version:
Serialize html5 forms the smart way
142 lines (109 loc) • 2.3 kB
JavaScript
/* eslint no-use-before-define: ["error", { "functions": false }] */
export function all(p, arr) {
const len = arr.length;
for (let i = 0; i < len; i += 1) {
if (!p(arr[i])) {
return false;
}
}
return true;
}
export function allPass(ps) {
return (x) => all((p) => p(x), ps);
}
export function any(p, arr) {
const len = arr.length;
for (let i = 0; i < len; i += 1) {
if (p(arr[i])) {
return true;
}
}
return false;
}
export function contains(el, arr) {
const len = arr.length;
for (let i = 0; i < len; i += 1) {
if (arr[i] === el) {
return true;
}
}
return false;
}
export function extendUniq(a, b) {
const len = b.length;
for (let i = 0; i < len; i += 1) {
if (!contains(b[i], a)) {
a.push(b[i]);
}
}
return a;
}
export function filter(p, arr) {
const filtered = [];
const len = arr.length;
for (let i = 0; i < len; i += 1) {
if (p(arr[i])) {
filtered.push(arr[i]);
}
}
return filtered;
}
export function flatMap(fn, arr) {
return reduce(
(acc, el) => {
const collection = fn(el);
const len = collection.length;
for (let i = 0; i < len; i += 1) {
acc.push(collection[i]);
}
return acc;
},
[],
arr,
);
}
export function isObject(value) {
if (!value) {
return false;
}
if (
value instanceof Date ||
value instanceof Promise ||
Array.isArray(value)
) {
return false;
}
const type = typeof value;
return (
type !== "bigint" &&
type !== "boolean" &&
type !== "number" &&
type !== "string" &&
type !== "symbol"
);
}
export function map(fn, arr) {
const mapped = [];
const len = arr.length;
for (let i = 0; i < len; i += 1) {
mapped.push(fn(arr[i]));
}
return mapped;
}
export function reduce(fn, init, arr) {
let acc = init;
const len = arr.length;
for (let i = 0; i < len; i += 1) {
acc = fn(acc, arr[i]);
}
return acc;
}
export function selectedValues(select) {
const options =
select.selectedOptions ||
filter((option) => option.selected, select.options);
return map((option) => option.value, options);
}
export function startsWith(match, string) {
return string.slice(0, match.length) === match;
}