@feugene/mu
Version:
Helpful TS utilities without dependencies
34 lines • 1.15 kB
JavaScript
/**
* Return common items for two arrays
*
* @param {Array} array
* @param {Array} array2
* @returns {any[]}
*/
export default function intersect(array, array2) {
// Уникальное пересечение за один проход по меньшему множеству
const aSet = new Set(array);
const bSet = new Set(array2);
const result = [];
// Идём по меньшему набору уникальных значений
const [small, big] = aSet.size <= bSet.size ? [aSet, bSet] : [bSet, aSet];
for (const v of small) {
if (big.has(v)) {
result.push(v);
}
}
return result;
}
/**
* Return common items for all arrays
*
* @param array
* @param arrays
* @returns {*|any[]}
*/
export function intersectAll(array, ...arrays) {
// Начинаем с самого короткого массива для уменьшения промежуточных наборов
const all = [array, ...arrays].sort((a, b) => a.length - b.length);
return all.slice(1).reduce((prev, next) => intersect(prev, next), all[0]);
}
//# sourceMappingURL=intersect.mjs.map