destructing is very useful and encourage good coding styles Is it? Personally I'd say that was bad code. What so wrong with using the original objects? Putting aside the need to variable swap once a year or so, all the other examples look really confusing to me and unclear what they're doing. The `Deep Matching` especially.
Consider the case of finding all companies along with their hires from the last week, but only if the company has a hire from the last week:
companies.map(c => [c, employeeStorage.getEmployees(c)])
.map(([company, employees]) => [company, employees.filter(e => e.hireDate > aWeekAgo)])
.filter(([company, employees]) => employees.length > 0)