I am looking to set inner properties of an object only if they already exist. Lodash _.set will create the whole hierarchy if it does not exist.
Is there an easy way to do this ? (Without and if statement ?)
Snippet below:
const obj = {a: {b: 1}};
_.set(obj, 'a.b', 2);
console.log(obj); // Great !
_.set(obj, 'a.c', 1);
console.log(obj); // Great but not what I want. I would like c not to be set because it does not exist in the first place<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
Advertisement
Answer
The answer from Kalaiselvan A below put me on the way but this is not quite what I was looking for.
Using the same idea but improving the ternary gives me the following solution which I am happy with.
const obj = {a: {b: 1}};
_.has(obj, 'a.b') && _.set(obj, 'a.b', 2);
console.log(obj);
_.has(obj, 'a.c') && _.set(obj, 'a.c', 2);
console.log(obj);<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script>