Add haveSameContents snippet
This commit is contained in:
23
snippets/haveSameContents.md
Normal file
23
snippets/haveSameContents.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
title: haveSameContents
|
||||||
|
tags: array,intermediate
|
||||||
|
---
|
||||||
|
|
||||||
|
Returns `true` if two arrays contain the same elements regardless of order, `false` otherwise.
|
||||||
|
|
||||||
|
Use a `for...of` loop over a `Set` created from the values of both arrays.
|
||||||
|
Use `Array.prototype.filter()` to compare the amount of occurences of each distinct value in both arrays.
|
||||||
|
Return `false` if the counts do not match for any element, `true` otherwise.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const haveSameContents = (a, b) => {
|
||||||
|
for (const v of new Set([...a, ...b]))
|
||||||
|
if (a.filter(e => e === v).length !== b.filter(e => e === v).length)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
haveSameContents([1, 2, 4], [2, 4, 1]); // true
|
||||||
|
```
|
||||||
17
test/haveSameContents.test.js
Normal file
17
test/haveSameContents.test.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
const {haveSameContents} = require('./_30s.js');
|
||||||
|
|
||||||
|
test('haveSameContents is a Function', () => {
|
||||||
|
expect(haveSameContents).toBeInstanceOf(Function);
|
||||||
|
});
|
||||||
|
test('returns true for arrays with same contents', () => {
|
||||||
|
expect(haveSameContents([1, 2, 3], [2, 3, 1])).toBeTruthy();
|
||||||
|
});
|
||||||
|
test('returns false for arrays with different contents', () => {
|
||||||
|
expect(haveSameContents([1, 2], [2, 3, 1])).toBeFalsy();
|
||||||
|
});
|
||||||
|
test('returns false for arrays with different contents', () => {
|
||||||
|
expect(haveSameContents([1, 2, 3], [2, 1])).toBeFalsy();
|
||||||
|
});
|
||||||
|
test('returns false for arrays with different contents', () => {
|
||||||
|
expect(haveSameContents([1, 2, 3], [2, 1, 6])).toBeFalsy();
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user