npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

for-each-property-deep

v0.0.3

Published

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

Downloads

214,147

Readme

for-each-property-deep

Build Status

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.

Usage


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.