# remove-undefined-objects

> Remove undefined properties and empty arrays from an object

Latest version **9.0.0** (published 2026-05-26) · MIT license · 0 weekly downloads

## Install

```sh
npm install remove-undefined-objects
pnpm add remove-undefined-objects
yarn add remove-undefined-objects
bun add remove-undefined-objects
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; high maintenance score; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 9.0.0 |
| Published | 2026-05-26 |
| First published | 2022-02-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=22 |
| Dependencies | 0 |
| Unpacked size | 31.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 7 |
| Author | Jon Ursenbach |
| Maintainers | gkoberger, domharrington, mjcuva, jonursenbach, rafegoldberg, dannobytes, darrenyong |

## Links

- npm: https://www.npmjs.com/package/remove-undefined-objects
- Repository: https://github.com/readmeio/remove-undefined-objects
- Homepage: https://github.com/readmeio/remove-undefined-objects#readme
- Issues: https://github.com/readmeio/remove-undefined-objects/issues
- npm.io page: https://npm.io/package/remove-undefined-objects

## Recent versions

- 9.0.0 (latest) — 2026-05-26
- 8.1.0 — 2026-05-18
- 8.0.1 — 2026-04-02
- 8.0.0 — 2026-04-02
- 7.0.0 — 2025-09-12
- 6.0.0 — 2025-01-10
- 5.0.0 — 2023-10-07
- 4.0.2 — 2023-09-01
- 4.0.1 — 2023-09-01
- 4.0.0 — 2023-09-01
- 3.0.0 — 2023-06-14
- 2.0.2 — 2022-12-01
- 2.0.1 — 2022-07-22
- 2.0.0 — 2022-04-26
- 1.1.0 — 2022-03-23
- … 1 more at https://npm.io/package/remove-undefined-objects/versions

## README

# remove-undefined-objects

[![Build](https://github.com/readmeio/remove-undefined-objects/workflows/CI/badge.svg)](https://github.com/readmeio/remove-undefined-objects/) [![](https://img.shields.io/npm/v/remove-undefined-objects)](https://npm.im/remove-undefined-objects)

[![](https://raw.githubusercontent.com/readmeio/.github/main/oss-header.png)](https://readme.io)

## Installation

```sh
npm install --save remove-undefined-objects
```

## Usage

```js
import removeUndefinedObjects from 'remove-undefined-objects';

console.log(removeUndefinedObjects({ key: [], key2: 123 }));
// { key2: 123 }
```

## Behavior

Any items with the following value will be removed by default:

- Empty object, `{}`
- Empty array, `[]`
- Undefined, `undefined`

The following items will NOT be removed:

- Empty string, `''`
- Null, `null`

## Options

### `preserveEmptyArray`

Optional boolean or context map.
Controls whether empty arrays will not get removed.

```js
import removeUndefinedObjects from 'remove-undefined-objects';

console.log(removeUndefinedObjects({ key1: [], key2: [undefined], nested: { key3: 'a', key4: [] } }));
// { nested: { key3: 'a' } }

console.log(
  removeUndefinedObjects(
    { key1: [], key2: [undefined], nested: { key3: 'a', key4: [] } },
    { preserveEmptyArray: true },
  ),
);
// { key1: [], key2: [], nested: { key3: 'a', key4: [] } }
```

To preserve empty arrays only in certain locations, provide a context map:

```js
console.log(removeUndefinedObjects([], { preserveEmptyArray: { root: true } }));
// []

console.log(
  removeUndefinedObjects(
    { key1: [], key2: [undefined], key3: [[], ['value']] },
    { preserveEmptyArray: { objectProperty: true } },
  ),
);
// { key1: [], key2: [], key3: [['value']] }

console.log(removeUndefinedObjects([[], [undefined], ['value']], { preserveEmptyArray: { arrayItem: true } }));
// [[], [], ['value']]
```

### `preserveEmptyObject`

Optional boolean or context map.
Controls whether empty objects will not be removed.

```js
import removeUndefinedObjects from 'remove-undefined-objects';

console.log(removeUndefinedObjects({ key1: {}, key2: { nested: undefined }, key3: 123 }));
// { key3: 123 }

console.log(
  removeUndefinedObjects({ key1: {}, key2: { nested: undefined }, key3: 123 }, { preserveEmptyObject: true }),
);
// { key1: {}, key2: {}, key3: 123 }
```

To preserve empty objects only in certain locations, provide a context map:

```js
console.log(removeUndefinedObjects({}, { preserveEmptyObject: { root: true } }));
// {}

console.log(removeUndefinedObjects({ key1: [{}, { nested: undefined }, { key: 'value' }] }));
// { key1: [{ key: 'value' }] }

console.log(
  removeUndefinedObjects(
    { key1: [{}, { nested: undefined }, { key: 'value' }], key2: {}, key3: { nested: undefined } },
    { preserveEmptyObject: { objectProperty: true } },
  ),
);
// { key1: [{ key: 'value' }], key2: {}, key3: {} }

console.log(
  removeUndefinedObjects([{}, { nested: undefined }, { key: 'value' }], { preserveEmptyObject: { arrayItem: true } }),
);
// [{}, {}, { key: 'value' }]
```

Supported preservation contexts are:

- `root`: the cleaned input value itself.
- `objectProperty`: a value assigned to an object property.
- `arrayItem`: a value contained directly in an array.

### `preserveNullishArrays`

Optional boolean.
If provided, null values in arrays will be preserved instead of being removed.

```js
import removeUndefinedObjects from 'remove-undefined-objects';

console.log(removeUndefinedObjects({ key1: [null, undefined], key2: 123, key3: null }));
// { key2: 123, key3: null }
console.log(
  removeUndefinedObjects({ key1: [null, undefined], key2: 123, key3: null }, { preserveNullishArrays: true }),
);
// { key1: [null], key2: 123, key3: null }
```

### `removeAllFalsy`

Optional boolean.
If provided, the empty string `''` and `null` will be removed as well.

```js
import removeUndefinedObjects from 'remove-undefined-objects';

console.log(removeUndefinedObjects({ key1: null, key2: 123, key3: '' }, { removeAllFalsy: true }));
// { key2: 123 }
```

---
_Source: https://npm.io/package/remove-undefined-objects · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
