There are tons of things that lodash still provides that can't be easily replicated.
Just in the last month or so I've used throttle, debounce, uniqBy, memoize, get, and i'm sure more.
Sure, things like map, filter, find, reduce, etc... are made obsolete, and `Object.values` is a huge win to iterating objects or arrays with the same code, but lodash is far from useless.
And the way the library is structured, pulling in just one or 2 functions is fairly lightweight if you are using a bundler like webpack/rollup.
Not really. `_.map` for example works on Objects, and property access is very nice.
`_.map(object, 'myProperty.mySubProperty')`
vs
`Object.values(object).map(i => i.myProperty ? i.myProperty.mySubProperty : undefined)`
Although that being said, for deep property access like you have, i still reach for lodash's `get`, or more recently i'm beginning to use the new stage-1 proposal for "optional chaining" (also known as null-conditional operator in C#) [0].
That turns your second example into:
Object.values(object).map(i => i.myProperty?.mySubProperty)
And honestly I might even reach for destructuring depending on the use case: Object.values(object).map(({myProperty}) => myProperty?.mySubProperty)
As nice as lodash's syntax is, it can be confusing for those who don't know it, and even I need to step back sometimes when I see it used heavily somewhere and almost replay what is happening in my head.