js-sdsl logo

A javascript standard data structure library which benchmark against C++ STL

NPM Version Build Status Coverage Status GITHUB Star NPM Downloads Gzip Size Rate this package MIT-license GITHUB-language

English | 简体中文

## ✨ Included data structures - **Stack** - first in last out stack. - **Queue** - first in first out queue. - **PriorityQueue** - heap-implemented priority queue. - **Vector** - protected array, cannot to operate properties like `length` directly. - **LinkList** - linked list of non-contiguous memory addresses. - **Deque** - double-ended-queue, O(1) time complexity to `unshift` or getting elements by index. - **OrderedSet** - sorted set which implemented by red black tree. - **OrderedMap** - sorted map which implemented by red black tree. - **HashSet** - refer to the [polyfill of ES6 Set](https://github.com/rousan/collections-es6). - **HashMap** - refer to the [polyfill of ES6 Map](https://github.com/rousan/collections-es6). ## ⚔️ Benchmark We are benchmarking against other popular data structure libraries. In some ways we're better than the best library. See [benchmark](https://js-sdsl.org/#/test/benchmark-analyze). ## 🖥 Supported platforms
IE / Edge
IE / Edge
Firefox
Firefox
Chrome
Chrome
Safari
Safari
Opera
Opera
NodeJs
NodeJs
Edge 12 31 49 10 36 10
## 📦 Download Download directly by cdn: - [js-sdsl.js](https://unpkg.com/js-sdsl/dist/umd/js-sdsl.js) (for development) - [js-sdsl.min.js](https://unpkg.com/js-sdsl/dist/umd/js-sdsl.min.js) (for production) Or install js-sdsl using npm: ```bash npm install js-sdsl ``` Or you can download the isolation packages containing only the containers you want: | package | npm | size | docs | |---------------------------------------------------|-----------------------------------------------------------------------|------------------------------------------------------------------|-----------------------------| | [@js-sdsl/stack][stack-package] | [![NPM Package][stack-npm-version]][stack-npm-link] | [![GZIP Size][stack-umd-size]][stack-umd-link] | [link][stack-docs] | | [@js-sdsl/queue][queue-package] | [![NPM Package][queue-npm-version]][queue-npm-link] | [![GZIP Size][queue-umd-size]][queue-umd-link] | [link][queue-docs] | | [@js-sdsl/priority-queue][priority-queue-package] | [![NPM Package][priority-queue-npm-version]][priority-queue-npm-link] | [![GZIP Size][priority-queue-umd-size]][priority-queue-umd-link] | [link][priority-queue-docs] | | [@js-sdsl/vector][vector-package] | [![NPM Package][vector-npm-version]][vector-npm-link] | [![GZIP Size][vector-umd-size]][vector-umd-link] | [link][vector-docs] | | [@js-sdsl/link-list][link-list-package] | [![NPM Package][link-list-npm-version]][link-list-npm-link] | [![GZIP Size][link-list-umd-size]][link-list-umd-link] | [link][link-list-docs] | | [@js-sdsl/deque][deque-package] | [![NPM Package][deque-npm-version]][deque-npm-link] | [![GZIP Size][deque-umd-size]][deque-umd-link] | [link][deque-docs] | | [@js-sdsl/ordered-set][ordered-set-package] | [![NPM Package][ordered-set-npm-version]][ordered-set-npm-link] | [![GZIP Size][ordered-set-umd-size]][ordered-set-umd-link] | [link][ordered-set-docs] | | [@js-sdsl/ordered-map][ordered-map-package] | [![NPM Package][ordered-map-npm-version]][ordered-map-npm-link] | [![GZIP Size][ordered-map-umd-size]][ordered-map-umd-link] | [link][ordered-map-docs] | | [@js-sdsl/hash-set][hash-set-package] | [![NPM Package][hash-set-npm-version]][hash-set-npm-link] | [![GZIP Size][hash-set-umd-size]][hash-set-umd-link] | [link][hash-set-docs] | | [@js-sdsl/hash-map][hash-map-package] | [![NPM Package][hash-map-npm-version]][hash-map-npm-link] | [![GZIP Size][hash-map-umd-size]][hash-map-umd-link] | [link][hash-map-docs] | ## 🪒 Usage You can visit our [official website](https://js-sdsl.org/) to get more information. To help you have a better use, we also provide this [API document](https://js-sdsl.org/js-sdsl/index.html). For previous versions of the documentation, please visit: `https://js-sdsl.org/js-sdsl/previous/v${version}/index.html` E.g. [https://js-sdsl.org/js-sdsl/previous/v4.1.5/index.html](https://js-sdsl.org/js-sdsl/previous/v4.1.5/index.html) ### For browser ```html ``` ### For npm ```javascript // esModule import { OrderedMap } from 'js-sdsl'; // commonJs const { OrderedMap } = require('js-sdsl'); const myOrderedMap = new OrderedMap(); myOrderedMap.setElement(1, 2); console.log(myOrderedMap.getElementByKey(1)); // 2 ``` ## 🛠 Test ### Unit test We use [karma](https://karma-runner.github.io/) and [mocha](https://mochajs.org/) frame to do unit tests and synchronize to [coveralls](https://coveralls.io/github/js-sdsl/js-sdsl). You can run `yarn test:unit` command to reproduce it. ### For performance We tested most of the functions for efficiency. You can go to [`gh-pages/performance.md`](https://github.com/js-sdsl/js-sdsl/blob/gh-pages/performance.md) to see our running results or reproduce it with `yarn test:performance` command. You can also visit [here](https://js-sdsl.org/#/test/performance-test) to get the result. ## ⌨️ Development Use Gitpod, a free online dev environment for GitHub. [![Open in Gippod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/js-sdsl/js-sdsl) Or clone locally: ```bash $ git clone https://github.com/js-sdsl/js-sdsl.git $ cd js-sdsl $ npm install $ npm run dev # development mode ``` Then you can see the output in `dist/cjs` folder. ## 🤝 Contributing Feel free to dive in! Open an issue or submit PRs. It may be helpful to read the [Contributor Guide](https://github.com/js-sdsl/js-sdsl/blob/main/.github/CONTRIBUTING.md). ### Contributors Thanks goes to these wonderful people:

Takatoshi Kondo

💻 ⚠️

noname

💻
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! ## ❤️ Sponsors and Backers The special thanks to these sponsors or backers because they provided support at a very early stage: eslint logo Thanks also give to these sponsors or backers: [![sponsors](https://opencollective.com/js-sdsl/tiers/sponsors.svg?avatarHeight=36)](https://opencollective.com/js-sdsl#support) [![backers](https://opencollective.com/js-sdsl/tiers/backers.svg?avatarHeight=36)](https://opencollective.com/js-sdsl#support) ## 🪪 License [MIT](https://github.com/js-sdsl/js-sdsl/blob/main/LICENSE) © [ZLY201](https://github.com/zly201) [stack-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/OtherContainer/Stack.ts [stack-npm-version]: https://img.shields.io/npm/v/@js-sdsl/stack [stack-npm-link]: https://www.npmjs.com/package/@js-sdsl/stack [stack-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/stack/dist/umd/stack.min.js?compression=gzip&style=flat-square/ [stack-umd-link]: https://unpkg.com/@js-sdsl/stack/dist/umd/stack.min.js [stack-docs]: https://js-sdsl.org/js-sdsl/classes/Stack.html [queue-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/OtherContainer/Queue.ts [queue-npm-version]: https://img.shields.io/npm/v/@js-sdsl/queue [queue-npm-link]: https://www.npmjs.com/package/@js-sdsl/queue [queue-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/queue/dist/umd/queue.min.js?compression=gzip&style=flat-square/ [queue-umd-link]: https://unpkg.com/@js-sdsl/queue/dist/umd/queue.min.js [queue-docs]: https://js-sdsl.org/js-sdsl/classes/Queue.html [priority-queue-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/OtherContainer/PriorityQueue.ts [priority-queue-npm-version]: https://img.shields.io/npm/v/@js-sdsl/priority-queue [priority-queue-npm-link]: https://www.npmjs.com/package/@js-sdsl/priority-queue [priority-queue-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/priority-queue/dist/umd/priority-queue.min.js?compression=gzip&style=flat-square/ [priority-queue-umd-link]: https://unpkg.com/@js-sdsl/priority-queue/dist/umd/priority-queue.min.js [priority-queue-docs]: https://js-sdsl.org/js-sdsl/classes/PriorityQueue.html [vector-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/SequentialContainer/Vector.ts [vector-npm-version]: https://img.shields.io/npm/v/@js-sdsl/vector [vector-npm-link]: https://www.npmjs.com/package/@js-sdsl/vector [vector-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/vector/dist/umd/vector.min.js?compression=gzip&style=flat-square/ [vector-umd-link]: https://unpkg.com/@js-sdsl/vector/dist/umd/vector.min.js [vector-docs]: https://js-sdsl.org/js-sdsl/classes/Vector.html [link-list-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/SequentialContainer/LinkList.ts [link-list-npm-version]: https://img.shields.io/npm/v/@js-sdsl/link-list [link-list-npm-link]: https://www.npmjs.com/package/@js-sdsl/link-list [link-list-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/link-list/dist/umd/link-list.min.js?compression=gzip&style=flat-square/ [link-list-umd-link]: https://unpkg.com/@js-sdsl/link-list/dist/umd/link-list.min.js [link-list-docs]: https://js-sdsl.org/js-sdsl/classes/LinkList.html [deque-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/SequentialContainer/Deque.ts [deque-npm-version]: https://img.shields.io/npm/v/@js-sdsl/deque [deque-npm-link]: https://www.npmjs.com/package/@js-sdsl/deque [deque-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/deque/dist/umd/deque.min.js?compression=gzip&style=flat-square/ [deque-umd-link]: https://unpkg.com/@js-sdsl/deque/dist/umd/deque.min.js [deque-docs]: https://js-sdsl.org/js-sdsl/classes/Deque.html [ordered-set-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/TreeContainer/OrderedSet.ts [ordered-set-npm-version]: https://img.shields.io/npm/v/@js-sdsl/ordered-set [ordered-set-npm-link]: https://www.npmjs.com/package/@js-sdsl/ordered-set [ordered-set-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/ordered-set/dist/umd/ordered-set.min.js?compression=gzip&style=flat-square/ [ordered-set-umd-link]: https://unpkg.com/@js-sdsl/ordered-set/dist/umd/ordered-set.min.js [ordered-set-docs]: https://js-sdsl.org/js-sdsl/classes/OrderedSet.html [ordered-map-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/TreeContainer/OrderedMap.ts [ordered-map-npm-version]: https://img.shields.io/npm/v/@js-sdsl/ordered-map [ordered-map-npm-link]: https://www.npmjs.com/package/@js-sdsl/ordered-map [ordered-map-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/ordered-map/dist/umd/ordered-map.min.js?compression=gzip&style=flat-square/ [ordered-map-umd-link]: https://unpkg.com/@js-sdsl/ordered-map/dist/umd/ordered-map.min.js [ordered-map-docs]: https://js-sdsl.org/js-sdsl/classes/OrderedMap.html [hash-set-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/HashContainer/HashSet.ts [hash-set-npm-version]: https://img.shields.io/npm/v/@js-sdsl/hash-set [hash-set-npm-link]: https://www.npmjs.com/package/@js-sdsl/hash-set [hash-set-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/hash-set/dist/umd/hash-set.min.js?compression=gzip&style=flat-square/ [hash-set-umd-link]: https://unpkg.com/@js-sdsl/hash-set/dist/umd/hash-set.min.js [hash-set-docs]: https://js-sdsl.org/js-sdsl/classes/HashSet.html [hash-map-package]: https://github.com/js-sdsl/js-sdsl/blob/main/src/container/HashContainer/HashMap.ts [hash-map-npm-version]: https://img.shields.io/npm/v/@js-sdsl/hash-map [hash-map-npm-link]: https://www.npmjs.com/package/@js-sdsl/hash-map [hash-map-umd-size]: https://img.badgesize.io/https://unpkg.com/@js-sdsl/hash-map/dist/umd/hash-map.min.js?compression=gzip&style=flat-square/ [hash-map-umd-link]: https://unpkg.com/@js-sdsl/hash-map/dist/umd/hash-map.min.js [hash-map-docs]: https://js-sdsl.org/js-sdsl/classes/HashMap.html