hoothoot
hoothoot hoothoot hoothoot.
you don't need to worry when you work with nested data.
Getting started
npm install hoothoot --save
yarn add hoothoot
Remember to install lodash also :D
How to use
Concept
It will take a path which has shape like:
a.b
a[0].b
a[{selector=value}].b
[0].b
[{selector=value}].b
And normalize it to a string that lodash get set can understand
Object path
Syntax : .key
a.b.c.d
Array path
Syntax : [{selector=value}]
or [index]
[0].[1].b
[{a.b=value}]
Example
; const origin = a1: 'a1Value' b1: c1: 'c1Value' a2: 'a2Value' b2: c2: 'c2Value' ; // getDeepPathconst path = '[{a1=a1Value}].b1.c1';const actualGetDeepPath1 = origin;const actualGetDeepPath2 = ;const expected = '[0].b1.c1'; // getDeepPathconst path = '[{b1.c1=c1Value}].b1.c1';const actualGetDeepPath1 = origin;const actualGetDeepPath2 = ;const expected = '[0].b1.c1'; // deepGetconst path = '[{a1=a1Value}].b1';const actualDeepGet1 = origin;const actualDeepGet2 = ;const expected = c1: 'c1'; // deepSetconst path = '[{a1=a1Value}].b1';const data = d1: 'd1';const newOrigin1 = dataorigin;const newOrigin2 = origin;const newOrigin3 = ;const expected = a1: 'a1' b1: d1: 'd1' a2: 'a2' b2: c2: 'c2' ; // deepUpdateconst path = '[{a1=a1Value}].b1';const updateFunction = { // oldData = { c1: c1 } return ...oldData d1: 'd1' ;}; const newOrigin1 = updateFunctionorigin;const newOrigin2 = origin;const newOrigin3 = ;const expected = a1: 'a1' b1: c1: 'c1' d1: 'd1' a2: 'a2' b2: c2: 'c2' ;