Add set operations. Union, intersect and difference

This commit is contained in:
Darren Scerri
2017-12-13 23:40:27 +01:00
parent 2674273efc
commit a4a7eb275a
5 changed files with 54 additions and 18 deletions

View File

@ -10,6 +10,9 @@
## Contents
* [Anagrams of string (with duplicates)](#anagrams-of-string-with-duplicates)
* [Array difference](#array-difference)
* [Array intersection](#array-intersection)
* [Array union](#array-union)
* [Average of array of numbers](#average-of-array-of-numbers)
* [Bottom visible](#bottom-visible)
* [Capitalize first letter of every word](#capitalize-first-letter-of-every-word)
@ -21,7 +24,6 @@
* [Current URL](#current-url)
* [Curry](#curry)
* [Deep flatten array](#deep-flatten-array)
* [Difference between arrays](#difference-between-arrays)
* [Distance between two points](#distance-between-two-points)
* [Divisible by number](#divisible-by-number)
* [Escape regular expression](#escape-regular-expression)
@ -85,6 +87,33 @@ const anagrams = str => {
// anagrams('abc') -> ['abc','acb','bac','bca','cab','cba']
```
### Array difference (complement)
Create a `Set` from `b`, then use `Array.filter()` on `a` to only keep values not contained in `b`.
```js
const difference = (a, b) => { const s = new Set(b); return a.filter(x => !s.has(x)); }
// difference([1,2,3], [1,2]) -> [3]
```
### Array intersection (Common values between two arrays)
Create a `Set` from `b`, then use `Array.filter()` on `a` to only keep values contained in `b`.
```js
const intersection = (a, b) => { const s = new Set(b); return a.filter(x => s.has(x)); }
// intersection([1,2,3], [4,3,2]) -> [2,3]
```
### Array union
Create a `Set` with all values of `a` and `b` and convert to an array.
```js
const union = (a, b) => Array.from(new Set([...a, ...b]))
// union([1,2,3], [4,3,2]) -> [1,2,3,4]
```
### Average of array of numbers
Use `Array.reduce()` to add each value to an accumulator, initialized with a value of `0`, divide by the `length` of the array.
@ -211,15 +240,6 @@ const deepFlatten = arr =>
// deepFlatten([1,[2],[[3],4],5]) -> [1,2,3,4,5]
```
### Difference between arrays
Use `filter()` to remove values that are part of `values`, determined using `includes()`.
```js
const difference = (arr, values) => arr.filter(v => !values.includes(v));
// difference([1,2,3], [1,2]) -> [3]
```
### Distance between two points
Use `Math.hypot()` to calculate the Euclidean distance between two points.

View File

@ -0,0 +1,8 @@
### Array difference (complement)
Create a `Set` from `b`, then use `Array.filter()` on `a` to only keep values not contained in `b`.
```js
const difference = (a, b) => { const s = new Set(b); return a.filter(x => !s.has(x)); }
// difference([1,2,3], [1,2]) -> [3]
```

View File

@ -0,0 +1,8 @@
### Array intersection (Common values between two arrays)
Create a `Set` from `b`, then use `Array.filter()` on `a` to only keep values contained in `b`.
```js
const intersection = (a, b) => { const s = new Set(b); return a.filter(x => s.has(x)); }
// intersection([1,2,3], [4,3,2]) -> [2,3]
```

8
snippets/array-union.md Normal file
View File

@ -0,0 +1,8 @@
### Array union
Create a `Set` with all values of `a` and `b` and convert to an array.
```js
const union = (a, b) => Array.from(new Set([...a, ...b]))
// union([1,2,3], [4,3,2]) -> [1,2,3,4]
```

View File

@ -1,8 +0,0 @@
### Difference between arrays
Use `filter()` to remove values that are part of `values`, determined using `includes()`.
```js
const difference = (arr, values) => arr.filter(v => !values.includes(v));
// difference([1,2,3], [1,2]) -> [3]
```