@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