diff --git a/src/comparisons/disjoint.function.ts b/src/comparisons/disjoint.function.ts index ba282ce..005e176 100644 --- a/src/comparisons/disjoint.function.ts +++ b/src/comparisons/disjoint.function.ts @@ -15,9 +15,9 @@ export function disjoint>(...sets: S[]): boolean { return true; } - const allElements = new Set(sets[0]); - for (let index = 1; index < sets.length; index++) { - for (const element of sets[index]!) { + const allElements = new Set(sets.shift()); + for (const set of sets) { + for (const element of set) { if (allElements.has(element)) { return false; } else { diff --git a/src/comparisons/equivalence.function.ts b/src/comparisons/equivalence.function.ts index 6a728a8..699a009 100644 --- a/src/comparisons/equivalence.function.ts +++ b/src/comparisons/equivalence.function.ts @@ -25,9 +25,10 @@ export function equivalence>(...sets: S[]): boolean return false; } - for (const element of sets[0]!) { - for (let index = 1; index < sets.length; index++) { - if (!sets[index]?.has(element)) { + const primarySet = sets.shift()!; + for (const element of primarySet) { + for (const set of sets) { + if (!set.has(element)) { return false; } } diff --git a/src/comparisons/proper-subset.function.ts b/src/comparisons/proper-subset.function.ts index 9d41648..bed1f2b 100644 --- a/src/comparisons/proper-subset.function.ts +++ b/src/comparisons/proper-subset.function.ts @@ -25,9 +25,10 @@ export function properSubset>(...sets: S[]): boolean return false; } - for (const element of sets[0]!) { - for (let index = 1; index < sets.length; index++) { - if (!sets[index]?.has(element)) { + const primarySet = sets.shift()!; + for (const element of primarySet) { + for (const set of sets) { + if (!set.has(element)) { return false; } } diff --git a/src/comparisons/proper-superset.function.ts b/src/comparisons/proper-superset.function.ts index 2fa0e55..5b48c16 100644 --- a/src/comparisons/proper-superset.function.ts +++ b/src/comparisons/proper-superset.function.ts @@ -25,9 +25,10 @@ export function properSuperset>(...sets: S[]): boole return false; } - for (let index = 1; index < sets.length; index++) { - for (const element of sets[index]!) { - if (!sets[0]?.has(element)) { + const primarySet = sets.shift()!; + for (const set of sets) { + for (const element of set) { + if (!primarySet.has(element)) { return false; } } diff --git a/src/comparisons/subset.function.ts b/src/comparisons/subset.function.ts index 665da8f..0e1e8d2 100644 --- a/src/comparisons/subset.function.ts +++ b/src/comparisons/subset.function.ts @@ -24,9 +24,10 @@ export function subset>(...sets: S[]): boolean { return false; } - for (const element of sets[0]!) { - for (let index = 1; index < sets.length; index++) { - if (!sets[index]?.has(element)) { + const primarySet = sets.shift()!; + for (const element of primarySet) { + for (const set of sets) { + if (!set.has(element)) { return false; } } diff --git a/src/comparisons/superset.function.ts b/src/comparisons/superset.function.ts index c8cccc2..c85d7ee 100644 --- a/src/comparisons/superset.function.ts +++ b/src/comparisons/superset.function.ts @@ -26,9 +26,10 @@ export function superset>(...sets: S[]): boolean { return false; } - for (let index = 1; index < sets.length; index++) { - for (const element of sets[index]!) { - if (!sets[0]?.has(element)) { + const primarySet = sets.shift()!; + for (const set of sets) { + for (const element of set) { + if (!primarySet.has(element)) { return false; } } diff --git a/src/operations/difference.function.ts b/src/operations/difference.function.ts index a428762..403a486 100644 --- a/src/operations/difference.function.ts +++ b/src/operations/difference.function.ts @@ -11,13 +11,13 @@ export function difference(...sets: ReadonlySet[]): ReadonlySet; * @description A ∖ B ≔ { x : (x ∈ A) ∧ (x ∉ B) } */ export function difference>(...sets: S[]): S { - const result = new Set(sets[0]); + const resultSet = new Set(sets.shift()); - for (let index = 1; index < sets.length; index++) { - for (const element of sets[index]!) { - result.delete(element); + for (const set of sets) { + for (const element of set) { + resultSet.delete(element); } } - return result as ReadonlySet as S; + return resultSet as ReadonlySet as S; } diff --git a/src/operations/intersection.function.ts b/src/operations/intersection.function.ts index 9bac511..8e8a647 100644 --- a/src/operations/intersection.function.ts +++ b/src/operations/intersection.function.ts @@ -9,15 +9,15 @@ export function intersection(...sets: ReadonlySet[]): ReadonlySet; * @description A ∩ B ≔ { x : (x ∈ A) ∧ (x ∈ B) } */ export function intersection>(...sets: S[]): S { - const result = new Set(sets[0]); + const resultSet = new Set(sets.shift()); - for (let index = 1; index < sets.length; index++) { - for (const element of result) { - if (!sets[index]!.has(element)) { - result.delete(element); + for (const set of sets) { + for (const element of resultSet) { + if (!set.has(element)) { + resultSet.delete(element); } } } - return result as ReadonlySet as S; + return resultSet as ReadonlySet as S; } diff --git a/src/operations/union.function.ts b/src/operations/union.function.ts index d8d071b..6dc11e5 100644 --- a/src/operations/union.function.ts +++ b/src/operations/union.function.ts @@ -9,13 +9,13 @@ export function union(...sets: ReadonlySet[]): ReadonlySet; * @description A ∪ B ≔ { x : (x ∈ A) ∨ (x ∈ B) } */ export function union>(...sets: S[]): S { - const result = new Set(sets[0]); + const resultSet = new Set(sets.shift()); - for (let index = 1; index < sets.length; index++) { - for (const element of sets[index]!) { - result.add(element); + for (const set of sets) { + for (const element of set) { + resultSet.add(element); } } - return result as ReadonlySet as S; + return resultSet as ReadonlySet as S; } diff --git a/src/operations/xor.function.ts b/src/operations/xor.function.ts index 5c5149c..42dc97a 100644 --- a/src/operations/xor.function.ts +++ b/src/operations/xor.function.ts @@ -11,19 +11,19 @@ export function xor(...sets: ReadonlySet[]): ReadonlySet; * @description A ∆ B ≔ { x : (x ∈ A) ⊕ (x ∈ B) } */ export function xor>(...sets: S[]): S { - const result = new Set(sets[0]); + const resultSet = new Set(sets.shift()); const reusedElements = new Set(); - for (let index = 1; index < sets.length; index++) { - for (const element of sets[index]!) { - if (result.has(element)) { - result.delete(element); + for (const set of sets) { + for (const element of set) { + if (resultSet.has(element)) { + resultSet.delete(element); reusedElements.add(element); } else if (!reusedElements.has(element)) { - result.add(element); + resultSet.add(element); } } } - return result as ReadonlySet as S; + return resultSet as ReadonlySet as S; }