diff --git a/benchmarks/bundle-size/omit.spec.ts b/benchmarks/bundle-size/omit.spec.ts index fa8fbe377..e72717746 100644 --- a/benchmarks/bundle-size/omit.spec.ts +++ b/benchmarks/bundle-size/omit.spec.ts @@ -14,6 +14,6 @@ describe('omit bundle size', () => { it('es-toolkit/compat', async () => { const bundleSize = await getBundleSize('es-toolkit/compat', 'omit'); - expect(bundleSize).toMatchInlineSnapshot(`8633`); + expect(bundleSize).toMatchInlineSnapshot(`8640`); }); }); diff --git a/src/compat/object/omit.spec.ts b/src/compat/object/omit.spec.ts index 016d1d535..de7a91884 100644 --- a/src/compat/object/omit.spec.ts +++ b/src/compat/object/omit.spec.ts @@ -36,6 +36,14 @@ describe('omit', () => { expect(actual).toEqual({ a: { b: 2 } }); }); + it('should treat a key array as a single deep path', () => { + const object = { a: { b: 1, c: 2 }, d: 3 }; + // @ts-expect-error - path is a string + expect(omit(object, [['a', 'b']])).toEqual({ a: { c: 2 }, d: 3 }); + // @ts-expect-error - path is a string + expect(omit(object, [['a', 'b'], 'd'])).toEqual({ a: { c: 2 } }); + }); + it('should omit a key over a path', () => { const object = { 'a.b': 1, a: { b: 2 } }; diff --git a/src/compat/object/omit.ts b/src/compat/object/omit.ts index 7032807ea..d49f43d4f 100644 --- a/src/compat/object/omit.ts +++ b/src/compat/object/omit.ts @@ -87,18 +87,19 @@ export function omit(obj: T | null | undefined, ...keysArr: Ar const result = cloneInOmit(obj, keysArr); for (let i = 0; i < keysArr.length; i++) { - let keys = keysArr[i]; + const keys = keysArr[i]; switch (typeof keys) { case 'object': { - if (!Array.isArray(keys)) { - keys = Array.from(keys as PropertyKey[]); - } - - for (let j = 0; j < keys.length; j++) { - const key = keys[j]; - - unset(result, key); + if (Array.isArray(keys)) { + // A key array is a single deep path (e.g. `['a', 'b']` targets `a.b`), matching lodash. + unset(result, keys); + } else { + const arrayLikeKeys = Array.from(keys as PropertyKey[]); + + for (let j = 0; j < arrayLikeKeys.length; j++) { + unset(result, arrayLikeKeys[j]); + } } break;