From 0fb61bbb762c877f1b2a8b4a6042fff8fee60fbd Mon Sep 17 00:00:00 2001 From: Daniele Debernardi Date: Tue, 29 Jul 2025 11:41:28 +0200 Subject: [PATCH 1/2] Fix convertNullToUndefined --- CHANGELOG.md | 4 ++++ src/lib/object.spec.ts | 6 ++++++ src/lib/object.ts | 14 +++++++++++--- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdb4e0d..16e7386 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - UMD build format from Rollup config +### Fixed + +- `convertNullToUndefined` is now handling arrays properly + ## [1.5.0] - 2025-07-07 ### Added diff --git a/src/lib/object.spec.ts b/src/lib/object.spec.ts index 66699d4..09c538d 100644 --- a/src/lib/object.spec.ts +++ b/src/lib/object.spec.ts @@ -36,6 +36,12 @@ describe("object tests", () => { [{ hello: null }, {}], [{ hello: "world", other: null }, { hello: "world" }], [{ nested: { prop1: "test", prop2: null } }, { nested: { prop1: "test" } }], + [{ nested: [{ prop1: "test", prop2: null }] }, { nested: [{ prop1: "test" }] }], + [{ nested: [1, 2, null, 3, 4] }, { nested: [1, 2, 3, 4] }], + [ + [{ hello: "world" }, null, { nested: { prop1: "test", prop2: null } }], + [{ hello: "world" }, { nested: { prop1: "test" } }], + ], ])("convertNullToUndefined", (obj, expected) => { convertNullToUndefined(obj); expect(obj).toStrictEqual(expected); diff --git a/src/lib/object.ts b/src/lib/object.ts index ac2f707..8bbee01 100644 --- a/src/lib/object.ts +++ b/src/lib/object.ts @@ -10,8 +10,16 @@ export const isObject = (obj: object): boolean => * Convert null properties to undefined * @param obj The object */ -export const convertNullToUndefined = (obj: object): void => { - if (!isObject(obj)) { +export const convertNullToUndefined = (obj: object | object[]): void => { + if (Array.isArray(obj)) { + for (const item of obj as unknown as object[]) { + if (item === null) { + obj.splice(obj.indexOf(item), 1); + } else if (isObject(item)) { + convertNullToUndefined(item); + } + } + } else if (!isObject(obj)) { return; } @@ -19,7 +27,7 @@ export const convertNullToUndefined = (obj: object): void => { const value = obj[key as keyof typeof obj]; if (value === null) { delete obj[key as keyof typeof obj]; - } else if (isObject(value)) { + } else if (isObject(value) || Array.isArray(value)) { convertNullToUndefined(value); } } From 5b5109e650005fee1fa417196cfa6f319ba3c794 Mon Sep 17 00:00:00 2001 From: Daniele Debernardi Date: Tue, 29 Jul 2025 12:01:47 +0200 Subject: [PATCH 2/2] fix --- src/lib/object.spec.ts | 4 ++-- src/lib/object.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/object.spec.ts b/src/lib/object.spec.ts index 09c538d..4dfe5ff 100644 --- a/src/lib/object.spec.ts +++ b/src/lib/object.spec.ts @@ -37,10 +37,10 @@ describe("object tests", () => { [{ hello: "world", other: null }, { hello: "world" }], [{ nested: { prop1: "test", prop2: null } }, { nested: { prop1: "test" } }], [{ nested: [{ prop1: "test", prop2: null }] }, { nested: [{ prop1: "test" }] }], - [{ nested: [1, 2, null, 3, 4] }, { nested: [1, 2, 3, 4] }], + [{ nested: [1, 2, null, 3, 4] }, { nested: [1, 2, undefined, 3, 4] }], [ [{ hello: "world" }, null, { nested: { prop1: "test", prop2: null } }], - [{ hello: "world" }, { nested: { prop1: "test" } }], + [{ hello: "world" }, undefined, { nested: { prop1: "test" } }], ], ])("convertNullToUndefined", (obj, expected) => { convertNullToUndefined(obj); diff --git a/src/lib/object.ts b/src/lib/object.ts index 8bbee01..cd4f1f8 100644 --- a/src/lib/object.ts +++ b/src/lib/object.ts @@ -14,7 +14,7 @@ export const convertNullToUndefined = (obj: object | object[]): void => { if (Array.isArray(obj)) { for (const item of obj as unknown as object[]) { if (item === null) { - obj.splice(obj.indexOf(item), 1); + obj[obj.indexOf(item)] = undefined; } else if (isObject(item)) { convertNullToUndefined(item); }