Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { purry } from './purry';
import { uniq } from './uniq';
import { deepEqual } from './deepEqual';
function _deepUniq<T>(array: T[], mode: 'soft' | 'hard') {
const uniqArr = uniq(array);
let uniqeItems: T[] = [];
let compareList = [...uniqArr];
while (compareList.length !== 0) {
const compareValue = compareList.shift();
Iif (!compareValue) break;
for (const iIndex in compareList) {
Eif (deepEqual(compareValue, compareList[iIndex], mode)) {
compareList.splice(parseInt(iIndex), 1);
continue;
}
}
uniqeItems.push(compareValue);
}
return uniqeItems;
}
/**
* Function will filter non unique value recursivly.
* @description
* The function has two modes `soft` and `hard` soft mode ignores array order hard mode preserves array order.
* @param array - source array
* @param mode - array comparison mode
* @example
* deepUniq([{ a: [1, 2] }, { a: [1, 2] }] }, { a: [2, 1] }] }], 'soft') // [{ a: [1, 2] }]
* @example
* deepUniq([{ a: [1, 2] }, { a: [1, 2] }] }, { a: [2, 1] }] }], 'hard') // [{ a: [1, 2] }, { a: [2, 1] }]
* @pipeable
* @category Array
*/
export function deepUniq<T>(array: readonly T[], mode?: 'soft' | 'hard'): T[];
export function deepUniq<T>(
mode?: 'soft' | 'hard'
): (array: readonly T[]) => T[];
export function deepUniq() {
return purry(_deepUniq, arguments);
}
|