diff --git a/snippets/head.md b/snippets/head.md index 9fdaefdbf..eed3d10e6 100644 --- a/snippets/head.md +++ b/snippets/head.md @@ -5,12 +5,16 @@ tags: array,beginner Returns the head of a list. -Use `arr[0]` to return the first element of the passed array. +Check if `arr` is truthy and has a `length` property, use `arr[0]` if possible +to return the first element, otherwise return `undefined` ```js -const head = arr => arr[0]; +const head = arr => (arr && arr.length ? arr[0] : undefined); ``` ```js head([1, 2, 3]); // 1 -``` \ No newline at end of file +head([]); // undefined +head(null); // undefined +head(undefined); // undefined +``` diff --git a/snippets/last.md b/snippets/last.md index 9b713d98d..fc1aaed07 100644 --- a/snippets/last.md +++ b/snippets/last.md @@ -5,12 +5,17 @@ tags: array,beginner Returns the last element in an array. -Use `arr.length - 1` to compute the index of the last element of the given array and returning it. +Check if `arr` is truthy and has a `length` property, use `arr.length - 1` to +compute the index of the last element of the given array and returning it, +otherwise return `undefined` ```js -const last = arr => arr[arr.length - 1]; +const last = arr => (arr && arr.length ? arr[arr.length - 1] : undefined); ``` ```js last([1, 2, 3]); // 3 -``` \ No newline at end of file +last([]); // undefined +last(null); // undefined +last(undefined); // undefined +``` diff --git a/test/head.test.js b/test/head.test.js index 2360ece26..1375409aa 100644 --- a/test/head.test.js +++ b/test/head.test.js @@ -15,20 +15,14 @@ test('head({ 0: false}) returns false', () => { test('head(String) returns S', () => { expect(head('String')).toBe('S'); }); -test('head(null) throws an Error', () => { - expect(() => { - head(null); - }).toThrow(); +test('head(null) returns undefined', () => { + expect(head(null)).toBe(undefined); }); -test('head(undefined) throws an Error', () => { - expect(() => { - head(undefined); - }).toThrow(); +test('head(undefined) returns undefined', () => { + expect(head(undefined)).toBe(undefined); }); -test('head() throws an Error', () => { - expect(() => { - head(); - }).toThrow(); +test('head() returns undefined', () => { + expect(head()).toBe(undefined); }); let start = new Date().getTime(); head([1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1122, 32124, 23232]); diff --git a/test/last.test.js b/test/last.test.js index 770c4933d..0c740cae4 100644 --- a/test/last.test.js +++ b/test/last.test.js @@ -15,20 +15,14 @@ test('last({ 0: false}) returns undefined', () => { test('last(String) returns g', () => { expect(last('String')).toBe('g'); }); -test('last(null) throws an Error', () => { - expect(() => { - last(null); - }).toThrow(); +test('last(null) returns undefined', () => { + expect(last(null)).toBe(undefined); }); -test('last(undefined) throws an Error', () => { - expect(() => { - last(undefined); - }).toThrow(); +test('last(undefined) returns undefined', () => { + expect(last(undefined)).toBe(undefined); }); -test('last() throws an Error', () => { - expect(() => { - last(); - }).toThrow(); +test('last() returns undefined', () => { + expect(last()).toBe(undefined); }); let start = new Date().getTime(); last([1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1122, 32124, 23232]);