UNPKG

@pawel-up/jexl

Version:

Javascript Expression Language: Powerful context-based expression parser and evaluator

137 lines 4.23 kB
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