Merge remote-tracking branch 'origin/master'

This commit is contained in:
Angelos Chalaris
2018-01-24 12:19:45 +02:00
3 changed files with 79 additions and 3 deletions

View File

@ -136,6 +136,8 @@ average(1, 2, 3);
* [`similarity`](#similarity) * [`similarity`](#similarity)
* [`sortedIndex`](#sortedindex) * [`sortedIndex`](#sortedindex)
* [`symmetricDifference`](#symmetricdifference) * [`symmetricDifference`](#symmetricdifference)
* [`symmetricDifferenceBy`](#symmetricdifferenceby)
* [`symmetricDifferenceWith`](#symmetricdifferencewith)
* [`tail`](#tail) * [`tail`](#tail)
* [`take`](#take) * [`take`](#take)
* [`takeRight`](#takeright) * [`takeRight`](#takeright)
@ -1744,6 +1746,61 @@ symmetricDifference([1, 2, 3], [1, 2, 4]); // [3,4]
<br>[⬆ Back to top](#table-of-contents) <br>[⬆ Back to top](#table-of-contents)
### symmetricDifferenceBy
Returns the symmetric difference between two arrays, after applying the provided function to each array element of both.
Create a `Set` by applying `fn` to each array's elements, then use `Array.filter()` on each of them to only keep values not contained in the other.
```js
const symmetricDifferenceBy = (a, b, fn) => {
const sA = new Set(a.map(v => fn(v))),
sB = new Set(b.map(v => fn(v)));
return [...a.filter(x => !sB.has(fn(x))), ...b.filter(x => !sA.has(fn(x)))];
};
```
<details>
<summary>Examples</summary>
```js
symmetricDifferenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); // [ 1.2, 3.4 ]
```
</details>
<br>[⬆ Back to top](#table-of-contents)
### symmetricDifferenceWith
Returns the symmetric difference between two arrays, using a provided function as a comparator.
Use `Array.filter()` and `Array.findIndex()` to find the appropriate values.
```js
const symmetricDifferenceWith = (arr, val, comp) => [
...arr.filter(a => val.findIndex(b => comp(a, b)) === -1),
...val.filter(a => arr.findIndex(b => comp(a, b)) === -1)
];
```
<details>
<summary>Examples</summary>
```js
symmetricDifferenceWith(
[1, 1.2, 1.5, 3, 0],
[1.9, 3, 0, 3.9],
(a, b) => Math.round(a) === Math.round(b)
); // [1, 1.2, 3.9]
```
</details>
<br>[⬆ Back to top](#table-of-contents)
### tail ### tail
Returns all elements in an array except for the first one. Returns all elements in an array except for the first one.

File diff suppressed because one or more lines are too long

View File

@ -7,10 +7,14 @@ Use `Array.filter()` and `Array.findIndex()` to find the appropriate values.
```js ```js
const symmetricDifferenceWith = (arr, val, comp) => [ const symmetricDifferenceWith = (arr, val, comp) => [
...arr.filter(a => val.findIndex(b => comp(a, b)) === -1), ...arr.filter(a => val.findIndex(b => comp(a, b)) === -1),
...val.filter(a => arr.findIndex(b => comp(a, b)) === -1), ...val.filter(a => arr.findIndex(b => comp(a, b)) === -1)
]; ];
``` ```
```js ```js
symmetricDifferenceWith([1, 1.2, 1.5, 3, 0], [1.9, 3, 0, 3.9], (a, b) => Math.round(a) === Math.round(b)); // [1, 1.2, 3.9] symmetricDifferenceWith(
[1, 1.2, 1.5, 3, 0],
[1.9, 3, 0, 3.9],
(a, b) => Math.round(a) === Math.round(b)
); // [1, 1.2, 3.9]
``` ```