Skip to content

Commit 28d6dc9

Browse files
authored
Fix convertNullToUndefined (#73)
1 parent 64a08e4 commit 28d6dc9

3 files changed

Lines changed: 21 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1515

1616
- UMD build format from Rollup config
1717

18+
### Fixed
19+
20+
- `convertNullToUndefined` is now handling arrays properly
21+
1822
## [1.5.0] - 2025-07-07
1923

2024
### Added

src/lib/object.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ describe("object tests", () => {
3636
[{ hello: null }, {}],
3737
[{ hello: "world", other: null }, { hello: "world" }],
3838
[{ nested: { prop1: "test", prop2: null } }, { nested: { prop1: "test" } }],
39+
[{ nested: [{ prop1: "test", prop2: null }] }, { nested: [{ prop1: "test" }] }],
40+
[{ nested: [1, 2, null, 3, 4] }, { nested: [1, 2, undefined, 3, 4] }],
41+
[
42+
[{ hello: "world" }, null, { nested: { prop1: "test", prop2: null } }],
43+
[{ hello: "world" }, undefined, { nested: { prop1: "test" } }],
44+
],
3945
])("convertNullToUndefined", (obj, expected) => {
4046
convertNullToUndefined(obj);
4147
expect(obj).toStrictEqual(expected);

src/lib/object.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,24 @@ export const isObject = (obj: object): boolean =>
1010
* Convert null properties to undefined
1111
* @param obj The object
1212
*/
13-
export const convertNullToUndefined = (obj: object): void => {
14-
if (!isObject(obj)) {
13+
export const convertNullToUndefined = (obj: object | object[]): void => {
14+
if (Array.isArray(obj)) {
15+
for (const item of obj as unknown as object[]) {
16+
if (item === null) {
17+
obj[obj.indexOf(item)] = undefined;
18+
} else if (isObject(item)) {
19+
convertNullToUndefined(item);
20+
}
21+
}
22+
} else if (!isObject(obj)) {
1523
return;
1624
}
1725

1826
for (const key of Object.keys(obj)) {
1927
const value = obj[key as keyof typeof obj];
2028
if (value === null) {
2129
delete obj[key as keyof typeof obj];
22-
} else if (isObject(value)) {
30+
} else if (isObject(value) || Array.isArray(value)) {
2331
convertNullToUndefined(value);
2432
}
2533
}

0 commit comments

Comments
 (0)