This commit is contained in:
Henry Szeto
2018-07-12 23:03:05 -07:00
parent 9176acf753
commit fdcf0fb929
2 changed files with 37 additions and 1 deletions

View File

@ -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;

View File

@ -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);
});
});
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);
});