Deep operations: getIn and setIn
Modélico objects support deeply getting values given a path, and deeply setting values given a path and a value.
Using the Animal
and Person
classes used in the introductory example and the nested types example
getIn
getIn
const defaultAnimal = new Animal()
const ownerOfUnnamedPet = new Person({
givenName: 'Javier',
familyName: 'Cejudo',
pets: M.List.of(M.Maybe.of(defaultAnimal))
})
ownerOfUnnamedPet.getIn([
'pets', // String for regular fields
0, // Numbers for M.List
[defaultAnimal, 'name'], // A pair of default and path item for M.Maybe
['Unknown'] // Same as above, but only the default name is
]) // required as we aren't going deeper
// => Unknown
Notice that the path items are strings for regular fields and numbers for M.List
. There is another dedicated way for M.Maybe
for the case where the value is not present, consisting of an array with two items: the default value, and the path item that applies for the inner type.
This is equivalent to the getIn
method above
ownerOfUnnamedPet
.pets()
.get(0)
.getOrElse(defaultAnimal).name()
.getOrElse('Unknown')
// => Unknown
setIn
setIn
To set values deeply, a very similar approach is used:
const ownerOfBane = ownerOfUnnamedPet.setIn([
'pets',
0,
[defaultAnimal, 'name']
], 'Bane')
ownerOfBane.getIn([
'pets',
0,
[defaultAnimal, 'name'],
['Unknown']
])
// => Bane
Last updated