Skip to content

Commit 40f6cb7

Browse files
jonfunkhousertmorehouse
authored andcommitted
fix(utils/get): handle case when nested value is falsy (#2982)
1 parent 7be99a8 commit 40f6cb7

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/utils/get.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const get = (obj, path, defaultValue = null) => {
3737
}
3838

3939
// Traverse path in object to find result
40-
return steps.every(step => isObject(obj) && obj.hasOwnProperty(step) && (obj = obj[step]))
40+
return steps.every(step => isObject(obj) && obj.hasOwnProperty(step) && (obj = obj[step]) != null)
4141
? obj
4242
: defaultValue
4343
}

src/utils/get.spec.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,17 @@ describe('get', () => {
1919
expect(get({}, [], 0)).toBe(0)
2020
expect(get({ a: 'b' }, 'b', {})).toEqual({})
2121
expect(get({ a: { c: 'd' } }, 'a.d', [])).toEqual([])
22+
expect(get({ a: { c: undefined } }, 'a.c')).toBe(null)
23+
expect(get({ a: 0, b: false }, 'c')).toBe(null)
2224
})
2325

2426
it('returns expected value', async () => {
2527
const obj1 = { a: 'b' }
2628
const obj2 = { a: { b: { c: { d: 'e' } } } }
2729
const obj3 = { a: [{ b: 'c' }] }
2830
const obj4 = { a: [[{ b: 'c' }], [{ d: { e: ['f'] } }]] }
31+
const obj5 = { a: { b: 0, c: '', d: false } }
32+
const obj6 = { a: 0, b: false }
2933

3034
expect(get(obj1, 'a')).toBe('b')
3135
expect(get(obj1, ['a'])).toBe('b')
@@ -36,6 +40,11 @@ describe('get', () => {
3640
expect(get(obj4, 'a[1][0].d.e[0]')).toBe('f')
3741
expect(get(obj4, ['a', 1, 0, 'd', 'e', 0])).toBe('f')
3842
expect(get(obj4, ['a[1]', 0, 'd', 'e[0]'])).toBe('f')
43+
expect(get(obj5, 'a.b')).toBe(0)
44+
expect(get(obj5, 'a.c')).toBe('')
45+
expect(get(obj5, 'a.d')).toBe(false)
46+
expect(get(obj6, 'a')).toBe(0)
47+
expect(get(obj6, 'b')).toBe(false)
3948
})
4049

4150
it('handles when field name has dot', async () => {

0 commit comments

Comments
 (0)