Implement a function deepOmit(obj, keysToOmit) that removes all occurrences of specific keys from an object or array, regardless of how deeply nested they are.
- It should not mutate the original object.
- The function should recursively traverse objects and arrays and omit the given keys.
Input:
obj: A deeply nested object or array.
keysToOmit: An array of strings representing the keys to be removed.
Output:
- A new object/array structure with the specified keys omitted at all levels.
Example Inputs & Outputs
deepOmit({ a: 1, b: { c: 2, d: 3 } }, ['c']);
// Output: { a: 1, b: { d: 3 } }
deepOmit({ a: { b: { c: 3, d: 4 }, c: 5 }, c: 1 }, ['c']);
// Output: { a: { b: { d: 4 } } }
deepOmit([{ a: 1, b: 2 }, { b: 3, c: 4 }], ['b']);
// Output: [{ a: 1 }, { c: 4 }]
Constraints & Edge Cases
- The object may contain nested arrays or other objects.
- Keys may appear multiple times at different nesting levels.
- Arrays should retain their structure.
- Must not mutate the original input object or array.