diff --git a/test/dig/dig.js b/test/dig/dig.js index 636d989c2..8ee35822a 100644 --- a/test/dig/dig.js +++ b/test/dig/dig.js @@ -1 +1,11 @@ +const dig = (obj, target) => + target in obj + ? obj[target] + : Object + .values(obj) + .reduce((acc, val) => { + if (acc !== undefined) return acc; + if (typeof val === 'object') return dig(val, target); + }, undefined); + module.exports = dig; \ No newline at end of file diff --git a/test/dig/dig.test.js b/test/dig/dig.test.js index 51834bfe2..d66391806 100644 --- a/test/dig/dig.test.js +++ b/test/dig/dig.test.js @@ -1,6 +1,32 @@ const expect = require('expect'); const dig = require('./dig.js'); +const data = { + level1:{ + level2:{ + level3: "some data", + level3f: false, + level3a: [1,2,3,4] + } + } +}; + test('dig is a Function', () => { expect(dig).toBeInstanceOf(Function); -}); \ No newline at end of file +}); + +test('Dig target success', () => { + expect(dig(data, 'level3')).toEqual('some data'); +}); + +test('Dig target with falsey value', () => { + expect(dig(data, 'level3f')).toEqual(false); +}); + +test('Dig target with array', () => { + expect(dig(data, 'level3a')).toEqual([1,2,3,4]); +}); + +test('Unknown target return undefined', () => { + expect(dig(data, 'level4')).toEqual(undefined); +});