mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
perf(editor): improve array intersection utility function (#4503)
This commit is contained in:
parent
3c9ad02ce3
commit
b0df810745
41
packages/editor-ui/src/utils.test.ts
Normal file
41
packages/editor-ui/src/utils.test.ts
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
import { isEmpty, intersection } from "@/utils";
|
||||||
|
|
||||||
|
describe("Utils", () => {
|
||||||
|
describe("isEmpty", () => {
|
||||||
|
it.each([
|
||||||
|
[undefined, true],
|
||||||
|
[null, true],
|
||||||
|
[{}, true],
|
||||||
|
[{ a: {}}, true],
|
||||||
|
[{ a: { b: []}}, true],
|
||||||
|
[{ a: { b: [1]}}, false],
|
||||||
|
[[], true],
|
||||||
|
[[{}, {}, {}], true],
|
||||||
|
[[{}, null, false], true],
|
||||||
|
[[{}, null, false, 1], false],
|
||||||
|
[[[], [], []], true],
|
||||||
|
["", true],
|
||||||
|
["0", false],
|
||||||
|
[0, false],
|
||||||
|
[1, false],
|
||||||
|
[false, true],
|
||||||
|
[true, false],
|
||||||
|
])(`for value %s should return %s`, (value, expected) => {
|
||||||
|
expect(isEmpty(value)).toBe(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("intersection", () => {
|
||||||
|
it("should return the intersection of two arrays", () => {
|
||||||
|
expect(intersection([1, 2, 3], [2, 3, 4])).toEqual([2, 3]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return the intersection of two arrays without duplicates", () => {
|
||||||
|
expect(intersection([1, 2, 2, 3], [2, 2, 3, 4])).toEqual([2, 3]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return the intersection of four arrays without duplicates", () => {
|
||||||
|
expect(intersection([1, 2, 2, 3, 4], [2, 3, 3, 4], [2, 1, 5, 4, 4, 1], [2, 4, 5, 5, 6, 7])).toEqual([2, 4]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
|
@ -57,4 +57,8 @@ export const isEmpty = (value?: unknown): boolean => {
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const intersection = <T>(a: T[], b:T[]): T[] => a.filter(Set.prototype.has, new Set(b));
|
export const intersection = <T>(...arrays: T[][]): T[] => {
|
||||||
|
const [a, b, ...rest] = arrays;
|
||||||
|
const ab = a.filter(v => b.includes(v));
|
||||||
|
return [...new Set(rest.length ? intersection(ab, ...rest) : ab)];
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue