@pawel-up/jexl
Version:
Javascript Expression Language: Powerful context-based expression parser and evaluator
137 lines • 4.23 kB
JavaScript
export const FIRST = (arr) => arr[0];
export const LAST = (arr) => arr[arr.length - 1];
export const AT = (arr, index) => arr[index];
export const SORT = (arr, compareFn) => {
return [...arr].sort(compareFn);
};
export const SORT_ASC = (arr) => {
return [...arr].sort((a, b) => (a > b ? 1 : a < b ? -1 : 0));
};
export const SORT_DESC = (arr) => {
return [...arr].sort((a, b) => (a < b ? 1 : a > b ? -1 : 0));
};
export const SLICE = (arr, start, end) => arr.slice(start, end);
export const JOIN = (arr, separator = ',') => arr.join(separator);
export const CONCAT = (...args) => {
const result = [];
for (const arg of args) {
if (Array.isArray(arg)) {
result.push(...arg);
}
else {
result.push(arg);
}
}
return result;
};
export const UNIQUE = (arr) => [...new Set(arr)];
export const FLATTEN = (arr) => arr.flat();
export const FLATTEN_DEEP = (arr) => arr.flat(Infinity);
export const CHUNK = (arr, size) => {
const chunks = [];
for (let i = 0; i < arr.length; i += size) {
chunks.push(arr.slice(i, i + size));
}
return chunks;
};
export const COMPACT = (arr) => arr.filter(Boolean);
export const DIFFERENCE = (...args) => {
if (args.length < 2)
return Array.isArray(args[0]) ? [...args[0]] : [args[0]];
const [first, ...rest] = args;
const firstArr = Array.isArray(first) ? first : [first];
const otherValues = rest.flat();
return firstArr.filter((item) => !otherValues.includes(item));
};
export const INTERSECTION = (...args) => {
if (args.length < 2)
return Array.isArray(args[0]) ? [...args[0]] : [args[0]];
const [first, ...rest] = args;
const firstArr = Array.isArray(first) ? first : [first];
return firstArr.filter((item) => {
return rest.every((arg) => {
const arr = Array.isArray(arg) ? arg : [arg];
return arr.includes(item);
});
});
};
export const UNION = (...args) => {
return UNIQUE(CONCAT(...args));
};
export const ZIP = (...args) => {
if (args.length === 0)
return [];
if (args.length === 1)
return args[0].map((item) => [item]);
const length = Math.min(...args.map((arr) => arr.length));
const result = [];
for (let i = 0; i < length; i++) {
result.push(args.map((arr) => arr[i]));
}
return result;
};
export const SHUFFLE = (arr) => {
const result = [...arr];
for (let i = result.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[result[i], result[j]] = [result[j], result[i]];
}
return result;
};
export const SAMPLE = (arr) => {
return arr[Math.floor(Math.random() * arr.length)];
};
export const SAMPLE_SIZE = (arr, count) => {
return SHUFFLE(arr).slice(0, Math.min(count, arr.length));
};
export const COUNT_BY = (arr) => {
const counts = {};
for (const item of arr) {
const key = String(item);
counts[key] = (counts[key] || 0) + 1;
}
return counts;
};
export const SUM = (...args) => {
if (Array.isArray(args[0])) {
return args[0].reduce((sum, num) => sum + num, 0);
}
return args.reduce((sum, num) => sum + num, 0);
};
export const AVERAGE = (...args) => {
if (Array.isArray(args[0])) {
const arr = args[0];
if (arr.length === 0)
return 0;
return SUM(arr) / arr.length;
}
if (args.length === 0)
return 0;
return SUM(...args) / args.length;
};
export const MIN = (...args) => {
if (Array.isArray(args[0])) {
return Math.min(...args[0]);
}
return Math.min(...args);
};
export const MAX = (...args) => {
if (Array.isArray(args[0])) {
return Math.max(...args[0]);
}
return Math.max(...args);
};
export const RANGE = (start, end, step = 1) => {
const result = [];
for (let i = start; i < end; i += step) {
result.push(i);
}
return result;
};
export const FILL = (value, count) => {
return Array(count).fill(value);
};
export const EVERY = (arr) => arr.every(Boolean);
export const SOME = (arr) => arr.some(Boolean);
export const NONE = (arr) => !arr.some(Boolean);
//# sourceMappingURL=array.js.map