@angular-ru/cdk/array

  • updateArray<T extends { id: any }>(sourceArray: Nullable<T[]>, updatedArray: Nullable<T[]>): T[];

  • updateArray<T>(sourceArray: Nullable<T[]>, updatedArray: Nullable<T[]>, compareFnOrKey: keyof T | CompareFn<T>): T[]

expect(
    updateArray(origin, [
        { id: 3, value: 3 },
        { id: 5, value: 5 }
    ])
).toEqual([
    { id: 1, value: 1 },
    { id: 2, value: 1 },
    { id: 3, value: 3 },
    { id: 4, value: 1 },
    { id: 5, value: 5 },
    { id: 6, value: 1 }
]);

// OR

expect(
    updateArray(
        origin,
        [
            { id: 3, value: 3 },
            { id: 5, value: 5 }
        ],
        (a: Value, b: Value): boolean => a.id === b.id
    )
).toEqual([
    { id: 1, value: 1 },
    { id: 2, value: 1 },
    { id: 3, value: 3 },
    { id: 4, value: 1 },
    { id: 5, value: 5 },
    { id: 6, value: 1 }
]);
  • uniqueArrayOf

expect(
    uniqueArrayOf(
        [
            { id: 1, value: 2 },
            { id: 2, value: 3 },
            { id: 1, value: 4 }
        ],
        (item) => item.id
    )
).toEqual([
    { id: 1, value: 2 },
    { id: 2, value: 3 }
]);

expect(
    uniqueArrayOf(
        [
            { ip: '1.2.3.4', info: { username: 'a' } },
            { ip: '1.2.3.5', info: { username: 'a' } },
            { ip: '1.2.3.6', info: { username: 'b' } },
            { ip: '1.2.3.7', info: { username: 'c' } }
        ],
        'info.username'
    )
).toEqual([
    { ip: '1.2.3.4', info: { username: 'a' } },
    { ip: '1.2.3.6', info: { username: 'b' } },
    { ip: '1.2.3.7', info: { username: 'c' } }
]);
  • unique

expect([a, a, 'a', 13, 13, '13'].filter(unique)).toEqual([a, 'a', 13, '13']);
  • partition

const [evens, odds] = partition([0, 1, 2, 3], (e) => e % 2 === 0);
console.log(evens); // [0, 2]
console.log(odds); // [1, 3]
  • exclude

expect([1, 2, 3, 4].filter(exclude([1, 2, 3]))).toEqual([4]);
expect([1, 2, 3, 4].filter(exclude(4))).toEqual([1, 2, 3]);

// No check for deep equality
expect([{ v: 1 }, { v: 2 }, { v: 3 }, { v: 4 }].filter(exclude({ v: 1 }))).toEqual([
    { v: 1 },
    { v: 2 },
    { v: 3 },
    { v: 4 }
]);
const unique = { v: 1 };
expect([unique, { v: 2 }, { v: 3 }, { v: 4 }].filter(exclude([unique, { v: 2 }]))).toEqual([
    { v: 2 },
    { v: 3 },
    { v: 4 }
]);
  • include

expect([1, 2, 3].filter(include(3))).toEqual([3]);
expect([1, 2, 3].filter(include([2, 3, 4]))).toEqual([2, 3]);
expect([{ v: 1 }, { v: 2 }, { v: 3 }].filter(include({ v: 1 }))).toEqual([]);
const unique: PlainObject = { v: 1 };
expect([unique, { v: 2 }, { v: 3 }].filter(include([unique]))).toEqual([unique]);
  • byPropertyValue

const array: Array<{ a: string; b: number }> = [
    { a: 'title', b: 1 },
    { a: 'title2', b: 2 },
    { a: 'title3', b: 3 }
];

expect(array.find(byPropertyValue('a', 'title'))).toStrictEqual({ a: 'title', b: 1 });
expect(array.find(byPropertyValue('b', 1))).toStrictEqual({ a: 'title', b: 1 });
expect(array.filter(byPropertyValue('a', 'title'))).toStrictEqual([
    { a: 'title', b: 1 },
    { a: 'title', b: 3 }
]);
expect(array.filter(byPropertyValue('b', 1))).toStrictEqual([{ a: 'title', b: 1 }]);
  • pick

const array: Array<{ a: string; b: any }> = [
    { a: 'foo', b: 1 },
    { a: 'bar', b: { c: 'baz' } }
];

expect(array.map(pick('a'))).toEqual(['foo', 'bar']);
expect(array.map(pick('b'))).toEqual([1, { c: 'baz' }]);
// No pick deep value
expect(array.map(pick('c'))).toEqual([undefined, undefined]);
  • hasItems

hasNoItem([1]); // true
hasNoItem([1, 2, 3]); // true
hasNoItem([]); // false
hasNoItem(null); // false
hasNoItem(undefined); // false
  • hasNoItems

hasNoItem([1]); // false
hasNoItem([1, 2, 3]); // false
hasNoItem([]); // true
hasNoItem(null); // true
hasNoItem(undefined); // true
  • hasOneItem

hasOneItem([1]); // true
hasOneItem([1, 2, 3]); // false
hasOneItem([]); // false
hasOneItem(null); // false
hasOneItem(undefined); // false
  • hasManyItems

hasManyItems([1]); // false
hasManyItems([1, 2, 3]); // true
hasManyItems([]); // false
hasManyItems(null); // false
hasManyItems(undefined); // false
  • hasAtMostOneItem

hasAtMostOneItem([1]); // true
hasAtMostOneItem([1, 2, 3]); // false
hasAtMostOneItem([]); // true
hasAtMostOneItem(null); // true
hasAtMostOneItem(undefined); // true

Last updated