# for-each-property-deep

> Executes a callback for each property found on a object, recursively on nested properties, with options regarding enumerability (enumerable or non-enumerable) and ownership (inherited or only own properties). It excludes built-in properties from Object an

Latest version **0.0.3** (published 2017-05-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install for-each-property-deep
pnpm add for-each-property-deep
yarn add for-each-property-deep
bun add for-each-property-deep
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.3 |
| Published | 2017-05-28 |
| First published | 2017-05-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Diego ZoracKy |
| Maintainers | diegozoracky |
| Keywords | recursive, deep, for, each, prop, property, object, function, enumerable, non-enumerable, nonenumerable, inherited, proto, prototype, prototype-chain, class, static |

## Links

- npm: https://www.npmjs.com/package/for-each-property-deep
- npm.io page: https://npm.io/package/for-each-property-deep

## Dependencies (1)

- [for-each-property](https://npm.io/package/for-each-property.md) 0.0.4

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 0.0.3 (latest) — 2017-05-28
- 0.0.2 — 2017-05-28

## README

# for-each-property-deep

[![Build Status](https://api.travis-ci.org/DiegoZoracKy/for-each-property-deep.svg)](https://travis-ci.org/DiegoZoracKy/for-each-property-deep)

Executes a callback for each property found on a object, recursively on nested properties, with options regarding **enumerability** (enumerable or non-enumerable) and **ownership** (inherited or only own properties). It excludes built-in properties from Object and Function prototypes by default, and this behaviour can also be configured via options.

## Goal

The goal is to provide a way to iterate through object's properties with a clean interface regarding **enumerability** and **ownership**, e.g. `{ enumerability: 'enumerable', inherited: true }`. Also, discarding (or not, is an option) the built-in properties that may be found when looking up on the prototype-chain.

This module is the recursive version, which will traverse object's nested properties, of [for-each-property](https://github.com/DiegoZoracKy/for-each-property).

## Usage

```javascript

const forEachPropertyDeep = require('for-each-property-deep');

const object = { a: { b: { c: 'cValue'} } };
const callback = (value, key, path, parent, state) => console.log(key, path);
const options = {enumerability: 'enumerable', inherited: false};

const resultState = forEachPropertyDeep(object, callback, options);

// All outputs (console.log) from callback will be:
// a [ 'a' ]
// b [ 'a', 'b' ]
// c [ 'a', 'b', 'c' ]
```
 **object**:
 Literal object, Object Instance, Class Reference... Any object whose properties can be iterated on.

 **callback**:
 Function that will receive `(value, key, path, parent, state)`.

 * **value**
 Current property value

 * **key**
 Current property name

 * **path**
 An array representing the current property path. e.g. from the above example it will be `[ 'a', 'b', 'c' ]` for the `'c'` property

 * **parent**
 The parent object of the current property. e.g. from the above example it will be the object `{ c: 'cValue' }` for the `'c'` property

 * **state**
 Is an object that will be stateful throughall iterations, and it will be the value returned by calling `forEachPropertyDeep`. It can be useful to handle any data from within the callback function, instead of relying on external variables. e.g., to store and get all the *paths* found.

 **options**:
 * **enumerability**:
 The options are: `'enumerable'` *(default)*, `'nonenumerable'` or `'all'`

 * **inherited**:
 The options are: `true` *(default)* or `false`

 * **excludeBuiltInPropsOf**:
 An array of objects whose prototype properties must be excluded. It defaults to `[Function, Object]`

 * **excludeProps**:
 An array properties that must be excluded. The default is `['prototype']`

## Example

To check an extended example on use cases regarding **enumerability** and **ownership** check [for-each-property#example](https://github.com/DiegoZoracKy/for-each-property#example).

---
_Source: https://npm.io/package/for-each-property-deep · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
