sikits
Version:
A powerful and comprehensive utility library for JavaScript and TypeScript with 100+ functions for strings, numbers, arrays, and objects
118 lines (117 loc) • 3.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.partition = exports.movingAverage = exports.rotate = exports.unzip = exports.zip = exports.uniqueBy = exports.findDuplicates = exports.max = exports.min = exports.average = exports.sum = exports.shuffle = exports.groupBy = exports.remove = exports.difference = exports.intersection = exports.compact = exports.chunk = exports.flatten = exports.unique = void 0;
function unique(array) {
return Array.from(new Set(array));
}
exports.unique = unique;
function flatten(arrays) {
return arrays.reduce((acc, val) => acc.concat(val), []);
}
exports.flatten = flatten;
function chunk(array, size) {
return Array.from({ length: Math.ceil(array.length / size) }, (_, i) => array.slice(i * size, i * size + size));
}
exports.chunk = chunk;
function compact(array) {
return array.filter((item) => Boolean(item));
}
exports.compact = compact;
function intersection(array1, array2) {
return array1.filter((item) => array2.includes(item));
}
exports.intersection = intersection;
function difference(array1, array2) {
return array1.filter((item) => !array2.includes(item));
}
exports.difference = difference;
function remove(array, value) {
return array.filter((item) => item !== value);
}
exports.remove = remove;
function groupBy(array, keyGetter) {
return array.reduce((acc, item) => {
const key = keyGetter(item);
(acc[key] = acc[key] || []).push(item);
return acc;
}, {});
}
exports.groupBy = groupBy;
function shuffle(array) {
return array.slice().sort(() => Math.random() - 0.5);
}
exports.shuffle = shuffle;
function sum(array) {
return array.reduce((acc, val) => acc + val, 0);
}
exports.sum = sum;
function average(array) {
return array.length > 0 ? sum(array) / array.length : 0;
}
exports.average = average;
function min(array) {
return array.length > 0 ? Math.min(...array) : Infinity;
}
exports.min = min;
function max(array) {
return array.length > 0 ? Math.max(...array) : -Infinity;
}
exports.max = max;
function findDuplicates(array) {
const seen = new Set();
const duplicates = new Set();
for (const item of array) {
if (seen.has(item)) {
duplicates.add(item);
}
seen.add(item);
}
return Array.from(duplicates);
}
exports.findDuplicates = findDuplicates;
function uniqueBy(array, keyGetter) {
const seen = new Set();
return array.filter((item) => {
const key = keyGetter(item);
if (seen.has(key)) {
return false;
}
seen.add(key);
return true;
});
}
exports.uniqueBy = uniqueBy;
function zip(array1, array2) {
const length = Math.min(array1.length, array2.length);
return Array.from({ length }, (_, i) => [array1[i], array2[i]]);
}
exports.zip = zip;
function unzip(pairs) {
return [pairs.map(([a]) => a), pairs.map(([, b]) => b)];
}
exports.unzip = unzip;
function rotate(array, steps) {
const len = array.length;
if (len === 0)
return [];
const shift = ((steps % len) + len) % len;
return [...array.slice(-shift), ...array.slice(0, -shift)];
}
exports.rotate = rotate;
function movingAverage(array, windowSize) {
if (windowSize <= 0 || array.length < windowSize)
return [];
return array
.map((_, i, arr) => i >= windowSize - 1
? sum(arr.slice(i - windowSize + 1, i + 1)) / windowSize
: undefined)
.filter((n) => n !== undefined);
}
exports.movingAverage = movingAverage;
function partition(array, predicate) {
return array.reduce((acc, item) => {
acc[predicate(item) ? 0 : 1].push(item);
return acc;
}, [[], []]);
}
exports.partition = partition;