Added symmetric difference as its own snippet, resolve #168
This commit is contained in:
17
README.md
17
README.md
@ -14,6 +14,7 @@
|
|||||||
* [Array intersection](#array-intersection)
|
* [Array intersection](#array-intersection)
|
||||||
* [Array remove](#array-remove)
|
* [Array remove](#array-remove)
|
||||||
* [Array sample](#array-sample)
|
* [Array sample](#array-sample)
|
||||||
|
* [Array symmetric difference](#array-symmetric-difference)
|
||||||
* [Array union](#array-union)
|
* [Array union](#array-union)
|
||||||
* [Array without](#array-without)
|
* [Array without](#array-without)
|
||||||
* [Array zip](#array-zip)
|
* [Array zip](#array-zip)
|
||||||
@ -137,7 +138,7 @@ Create a `Set` from `b`, then use `Array.filter()` on `a` to only keep values no
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const difference = (a, b) => { const s = new Set(b); return a.filter(x => !s.has(x)); };
|
const difference = (a, b) => { const s = new Set(b); return a.filter(x => !s.has(x)); };
|
||||||
// difference([1,2,3], [1,2]) -> [3]
|
// difference([1,2,3], [1,2,4]) -> [3]
|
||||||
```
|
```
|
||||||
|
|
||||||
[⬆ back to top](#table-of-contents)
|
[⬆ back to top](#table-of-contents)
|
||||||
@ -181,6 +182,20 @@ const sample = arr => arr[Math.floor(Math.random() * arr.length)];
|
|||||||
|
|
||||||
[⬆ back to top](#table-of-contents)
|
[⬆ back to top](#table-of-contents)
|
||||||
|
|
||||||
|
### Array symmetric difference
|
||||||
|
|
||||||
|
Create a `Set` from each array, then use `Array.filter()` on each of them to only keep values not contained in the other.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const symmetricDifference = (a, b) => {
|
||||||
|
const sA = new Set(a), sB = new Set(b);
|
||||||
|
return [...a.filter(x => !sB.has(x)), ...b.filter(x => !sA.has(x))];
|
||||||
|
}
|
||||||
|
// symmetricDifference([1,2,3], [1,2,4]) -> [3,4]
|
||||||
|
```
|
||||||
|
|
||||||
|
[⬆ back to top](#table-of-contents)
|
||||||
|
|
||||||
### Array union
|
### Array union
|
||||||
|
|
||||||
Create a `Set` with all values of `a` and `b` and convert to an array.
|
Create a `Set` with all values of `a` and `b` and convert to an array.
|
||||||
|
|||||||
@ -3,14 +3,6 @@
|
|||||||
Create a `Set` from `b`, then use `Array.filter()` on `a` to only keep values not contained in `b`.
|
Create a `Set` from `b`, then use `Array.filter()` on `a` to only keep values not contained in `b`.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const difference = (a, b) => { const s = new Set(b); a.filter(x => !s.has(x)); };
|
const difference = (a, b) => { const s = new Set(b); return a.filter(x => !s.has(x)); };
|
||||||
// difference([1,2,3], [1,2,4]) -> [3]
|
// difference([1,2,3], [1,2,4]) -> [3]
|
||||||
```
|
```
|
||||||
|
|
||||||
This function can also be used to generate the symmetric difference or disjunctive union by swapping the
|
|
||||||
arrays and combining the results.
|
|
||||||
|
|
||||||
```js
|
|
||||||
const symmetricDifference = (a, b) => [...difference(a,b), ...difference(b,a)];
|
|
||||||
// difference([1,2,3], [1,2,4]) -> [3,4]
|
|
||||||
```
|
|
||||||
|
|||||||
11
snippets/array-symmetric-difference.md
Normal file
11
snippets/array-symmetric-difference.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
### Array symmetric difference
|
||||||
|
|
||||||
|
Create a `Set` from each array, then use `Array.filter()` on each of them to only keep values not contained in the other.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const symmetricDifference = (a, b) => {
|
||||||
|
const sA = new Set(a), sB = new Set(b);
|
||||||
|
return [...a.filter(x => !sB.has(x)), ...b.filter(x => !sA.has(x))];
|
||||||
|
}
|
||||||
|
// symmetricDifference([1,2,3], [1,2,4]) -> [3,4]
|
||||||
|
```
|
||||||
@ -4,6 +4,7 @@ array-difference:array
|
|||||||
array-intersection:array
|
array-intersection:array
|
||||||
array-remove:array
|
array-remove:array
|
||||||
array-sample:array
|
array-sample:array
|
||||||
|
array-symmetric-difference:array
|
||||||
array-union:array
|
array-union:array
|
||||||
array-without:array
|
array-without:array
|
||||||
array-zip:array
|
array-zip:array
|
||||||
|
|||||||
Reference in New Issue
Block a user