Git Product home page Git Product logo

search's Introduction

Search

npm NPM npm npm bundle size (scoped)

Searching through arrays, nested arrays, or objects for specific keywords can often be cumbersome, especially when dealing with deeply nested structures. This package simplifies that process by offering a lightweight, flexible search utility that delves into every key of an object or array elements to find matches. It utilizes ES6+ syntax, so if your codebase uses older standards, a transpiler might be required.

Demo

Explore the live demonstration available on CodeSandbox:

View @smakss/search

How it works?

To install the package:

npm i @smakss/search
# or
yarn add @smakss/search

For CommonJS modules:

const Search = require('@smakss/search');

For ECMAScript modules:

import Search from '@smakss/search';

Then, to utilize the search function within your application:

The Search function accepts an options object with the following properties:

  • searchText (String): The string to search for.
  • searchItems (Array|Object): The items or structure to search within.
  • keys (Array): An array of keys to include or exclude from the search.
  • include (Boolean): Determines whether to include (true) or exclude (false) the keys specified. Defaults to true.
  • exact (Boolean): Determines whether to perform an exact match search. Defaults to false.

The search function can take a generic type to specify the type of the search items.

Examples of Usage

Lets suppose we have the following type:

type Person = { name: string; lastName: string };

Searching Within an Object

When the match is found in an object, the entire object is returned:

const obj: Person = { name: 'John', lastName: 'Doe' };

const results = Search<Person>({ searchText: 'john', searchItems: [obj] });
// Results: [{ name: 'John', lastName: 'Doe' }]

Searching Within an Array

const arr: Person[] = [
  { name: 'John', lastName: 'Doe' },
  { name: 'Joe', lastName: 'Doe' }
];

const results = Search<Person>({ searchText: 'john', searchItems: arr });
// Results: [{ name: 'John', lastName: 'Doe' }]

Searching Within a Nested Array

const nestedArr: (Person | Person[])[] = [
  { name: 'John', lastName: 'Doe' },
  { name: 'Joe', lastName: 'Doe' },
  [{ name: 'Jane', lastName: 'Doe' }]
];

const results = Search<Person | Person[]>({
  searchText: 'jane',
  searchItems: nestedArr
});
// Results: [{ name: 'Jane', lastName: 'Doe' }]

Including Specific Keys

const results = Search<Person>({
  searchText: 'jane',
  searchItems: nestedArr,
  keys: ['name']
});
// Results: [{ name: 'Jane', lastName: 'Doe' }]

Excluding Specific Keys

const results = Search<Person>({
  searchText: 'jane',
  searchItems: nestedArr,
  keys: ['lastName'],
  include: false
});
// Results: []

Note: The result is an empty array because 'lastName' is excluded from the search.

Performing an Exact Match Search

const results = Search<Person>({
  searchText: 'jane',
  searchItems: nestedArr,
  exact: true
});
// Results: [{ name: 'Jane', lastName: 'Doe' }]

Note: Only the exact term 'Jane' is matched, not 'Janet' or other partial matches.

Contributing

Interested in contributing to this project? Please refer to CONTRIBUTING.md for contribution guidelines.

Code of Conduct

Our community prioritizes the well-being and inclusivity of all contributors and users. Please review our Code of Conduct to help maintain a supportive environment for everyone.

search's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar mlbonniec avatar smakss avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

itsamitg

search's Issues

Replace SearchItem type into a generic type

Brief Description

Currently searchItems type, and search() function return type is SearchItem.
However, it could be great to add support to a generic type, to make the function return a custom type (extending from SearchItem).

If that's okay, I can make a PR myself.

Environment

  • @smakss/search version: 2.0.1
  • node.js version: v21.7.1
  • npm version: v10.5.0

Code Snippet

Here's an example of what it could be.

interface MyCustomType extends SearchItem {}

const items: MyCustomType[] = [{}, {}, {}] // …
const result: MyCustomType[] = search<MyCustomType>({ searchItems: items, searchText: '…' });

search function options shouldn't be a partial type from SearchOptions

Brief Description

Currently the options parameter of the search function is of type Partial<SearchOptions>.
All properties have a default value.
As searchItems and searchText are mandatory for the search, they shouldn't be optional.

The options type should be a type with keys, include, exact optional, and searchItems, searchText required.

If that's okay, I can make a PR myself.

Environment

  • @smakss/search version: 2.0.1
  • node.js version: v21.7.1
  • npm version: v10.5.0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.