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

tree-search

v1.0.0

Published

Create a function to search a tree of items

Downloads

888

Readme

tree-search

Travis npm

Create a function to search a tree of items

Use this if you deal with a custom recursive data structure often.

Installation

npm install tree-search

Usage

Create a search function that knows your tree's structure, then call the function to look for specific key/value pairs.

const treeSearch = require('tree-search');

// Our tree uses the key `children` for nested items
const tree = [
  { id: 1 },
  { id: 2, children: [
    { id: 3, doggos: true },
  ]},
];

const find = treeSearch('children');

find(tree, 'id', 1); // => { id: 1 }
find(tree, 'doggos', true); // => { id: 3, doggos: true }
find(tree, 'id', 4); // => undefined

You can also specify the key upfront, and then you can just pass the value to the created function.

const treeSearch = require('tree-search');

// Our tree uses the key `children` for nested items
const tree = [
  { id: 1 },
  { id: 2, children: [
    { id: 3, doggos: true },
  ]},
];

const find = treeSearch('children', 'id');

find(tree, 1); // => { id: 1 }
find(tree, 3); // => { id: 3, doggos: true }
find(tree, 4); // => undefined

API

treeSearch(subKey[, idKey])

Create a search function that recursively searches an array of objects.

  • subKey (String): property in each object that will contain an array of objects.
  • idKey (String): key to match against when searching for items.

Returns a finder function. The signature of the function depends on if idKey is provided or not.

find(tree, key, value)

This function is created if treeSearch() is called without the idKey parameter. Finds the first item in a tree with the key/value pair specified.

  • tree (Array of Objects): tree to search.
  • key (String): key to inspect on each object.
  • value (String): value to match against.

Returns the object found, or undefined if one wasn't found.

find(tree, value)

This function is created if treeSearch() is called with the idKey parameter. Finds the first item in a tree with value assigned to idKey.

  • tree (Array of Objects): tree to search.
  • value (String): value to match against.

Returns the object found, or undefined if one wasn't found.

Local Development

git clone https://github.com/gakimball/tree-search
cd tree-search
npm install
npm test

License

MIT © Geoff Kimball