You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

16 KiB

js-sdsl logo

一款参考 C++ STL 实现的 JavaScript 标准数据结构库

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

English | 简体中文

包含的数据结构

  • Stack - 先进后出的堆栈
  • Queue - 先进先出的队列
  • PriorityQueue - 堆实现的优先级队列
  • Vector - 受保护的数组,不能直接操作像 length 这样的属性
  • LinkList - 非连续内存地址的链表
  • Deque - 双端队列,向前和向后插入元素或按索引获取元素的时间复杂度为 O(1)
  • OrderedSet - 由红黑树实现的排序集合
  • OrderedMap - 由红黑树实现的排序字典
  • HashSet - 参考 ES6 Set polyfill 实现的哈希集合
  • HashMap - 参考 ES6 Set polyfill 实现的哈希字典

⚔️ 基准测试

我们和其他数据结构库进行了基准测试,在某些场景我们甚至超过了当前最流行的库

查看 benchmark 以获取更多信息

🖥 支持的平台

IE / Edge
IE / Edge
Firefox
Firefox
Chrome
Chrome
Safari
Safari
Opera
Opera
NodeJs
NodeJs
Edge 12 31 49 10 36 10

📦 下载

使用 cdn 直接引入

使用 npm 下载

npm install js-sdsl

或者根据需要安装以下任意单个包

package npm size docs
@js-sdsl/stack NPM Package GZIP Size link
@js-sdsl/queue NPM Package GZIP Size link
@js-sdsl/priority-queue NPM Package GZIP Size link
@js-sdsl/vector NPM Package GZIP Size link
@js-sdsl/link-list NPM Package GZIP Size link
@js-sdsl/deque NPM Package GZIP Size link
@js-sdsl/ordered-set NPM Package GZIP Size link
@js-sdsl/ordered-map NPM Package GZIP Size link
@js-sdsl/hash-set NPM Package GZIP Size link
@js-sdsl/hash-map NPM Package GZIP Size link

🪒 使用说明

您可以访问我们的主页获取更多信息

并且我们提供了完整的 API 文档供您参考

想要查看从前版本的文档,请访问:

https://js-sdsl.org/js-sdsl/previous/v${version}/index.html

例如:

https://js-sdsl.org/js-sdsl/previous/v4.1.5/index.html

在浏览器中使用

<script src="https://unpkg.com/js-sdsl/dist/umd/js-sdsl.min.js"></script>
<script>
    const { 
      Vector,
      Stack,
      Queue,
      LinkList,
      Deque,
      PriorityQueue,
      OrderedSet,
      OrderedMap,
      HashSet,
      HashMap
    } = sdsl;
    const myOrderedMap = new OrderedMap();
    myOrderedMap.setElement(1, 2);
    console.log(myOrderedMap.getElementByKey(1)); // 2
</script>

npm 引入

// 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

🛠 测试

单元测试

我们使用 karmamocha 框架进行单元测试,并同步到 coveralls 上,你可以使用 yarn test:unit 命令来重建它

对于性能的校验

我们对于编写的所有 API 进行了性能测试,并将结果同步到了 gh-pages/performance.md 中,你可以通过 yarn test:performance 命令来重现它

您也可以访问我们的网站来获取结果

⌨️ 开发

可以使用 Gitpod 进行在线编辑:

Open in Gippod

或者在本地使用以下命令获取源码进行开发:

$ git clone https://github.com/js-sdsl/js-sdsl.git
$ cd js-sdsl
$ npm install
$ npm run dev   # development mode

之后您在 dist/cjs 文件夹中可以看到在 dev 模式下打包生成的产物

🤝 贡献

我们欢迎所有的开发人员提交 issue 或 pull request,阅读贡献者指南可能会有所帮助

贡献者

感谢对本项目做出贡献的开发者们:


Takatoshi Kondo

💻 ⚠️

noname

💻

本项目遵循 all-contributors 规范。 欢迎任何形式的贡献!

❤️ 赞助者

特别鸣谢下列赞助商和支持者们,他们在非常早期的时候为我们提供了支持:

eslint logo

同样感谢这些赞助商和支持者们:

sponsors

backers

🪪 许可证

MIT © ZLY201