Merge pull request #717 from Chalarangelo/longest-item-patch
Updated longestItem + tests
This commit is contained in:
@ -1,11 +1,13 @@
|
|||||||
### longestItem
|
### longestItem
|
||||||
|
|
||||||
Takes any number of iterable objects or objects with a `length` property and returns the longest one.
|
Takes any number of iterable objects or objects with a `length` property and returns the longest one.
|
||||||
|
If multiple objects have the same length, the first one will be returned.
|
||||||
|
Returns `undefined` if no arguments are provided.
|
||||||
|
|
||||||
Use `Array.reduce()` to collect the longest element. Returns [] for empty array.
|
Use `Array.reduce()`, comparing the `length` of objects to find the longest one.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
const longestItem = (...vals) => [...vals].reduce((a, x) => (a.length > x.length ? a : x), []);
|
const longestItem = (val, ...vals) => [val, ...vals].reduce((a, x) => x.length > a.length ? x : a);
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
@ -1,2 +1,2 @@
|
|||||||
const longestItem = (...vals) => [...vals].reduce((a, x) => (a.length > x.length ? a : x), []);
|
const longestItem = (val, ...vals) => [val, ...vals].reduce((a, x) => x.length > a.length ? x : a);
|
||||||
module.exports = longestItem;
|
module.exports = longestItem;
|
||||||
|
|||||||
@ -4,6 +4,29 @@ const longestItem = require('./longestItem.js');
|
|||||||
test('longestItem is a Function', () => {
|
test('longestItem is a Function', () => {
|
||||||
expect(longestItem).toBeInstanceOf(Function);
|
expect(longestItem).toBeInstanceOf(Function);
|
||||||
});
|
});
|
||||||
test('Returns the longest object', () => {
|
test('Returns the longest object from plain values', () => {
|
||||||
expect(longestItem('this', 'is', 'a', 'testcase')).toEqual('testcase');
|
expect(longestItem('this', 'is', 'a', 'testcase')).toEqual('testcase');
|
||||||
});
|
});
|
||||||
|
test('Returns the longest object from a spread array', () => {
|
||||||
|
expect(longestItem(...['a', 'ab', 'abc'])).toEqual('abc');
|
||||||
|
});
|
||||||
|
test('Returns the longest object from mixed input', () => {
|
||||||
|
expect(longestItem(...['a', 'ab', 'abc'],'abcd')).toEqual('abcd');
|
||||||
|
});
|
||||||
|
test('Returns the longest array', () => {
|
||||||
|
expect(longestItem([1, 2, 3], [1, 2], [1, 2, 3, 4, 5])).toEqual([1, 2, 3, 4, 5]);
|
||||||
|
});
|
||||||
|
test('Returns the longest object when comparing arrays and strings', () => {
|
||||||
|
expect(longestItem([1, 2, 3], 'foobar')).toEqual('foobar');
|
||||||
|
});
|
||||||
|
test('Returns undefined without any input', () => {
|
||||||
|
expect(longestItem()).toEqual(undefined);
|
||||||
|
});
|
||||||
|
test('Returns first found of all similar', () => {
|
||||||
|
expect(longestItem('a','b','c')).toEqual('a');
|
||||||
|
});
|
||||||
|
test('Throws TypeError if all inputs are undefined', () => {
|
||||||
|
expect(() => {
|
||||||
|
longestItem(undefined,undefined);
|
||||||
|
}).toThrow(TypeError);
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user