如何实现一个简单的有索引的数组?

发布于 2022-09-11 19:52:58 字数 660 浏览 14 评论 0

如何实现一个索引数组?

场景

像下面这段代码

class User {
  constructor(id, name, age) {
    this.id = id
    this.name = name
    this.age = age
  }
}
const users = [
  new User(1, 'rxliuli', 18),
  new User(2, '琉璃', 17),
  new User(3, '灵梦', 16),
  new User(4, '楚轩', 23),
  new User(5, '月姬', 1000),
  new User(6, '音无', 16),
]

console.log(users.find(({ id }) => id === 1))
console.log(users.find(({ name }) => name === '音无'))
console.log(users.filter(({ age }) => age >= 18))

难道实现这些功能就只能遍历么?能否实现某种数据结构能够指定某个字段有索引,然后能够以常量时间根据该字段进行查找/过滤等操作呢?

Pass: 结构化的数据库一般都有索引这种功能,为何程序中反而没有呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美胚控场 2022-09-18 19:52:58

你可以自己做一个反向索引(reverse index)啊,很简单,就是个string => array的映射。比如:

var revIdxOnAge = new Array(1000);
revIdxOnAge[18] = [new User(1, 'rxliuli', 18)];
revIdxOnAge[17] = [new User(2, '琉璃', 17)];
...

var usersAgeGraterThan23 = revIdxOnAge.filter((e,i)=>i>23).reduce((a,b)=>[...a,...b], []);

但是你给的数据太过于离散了,所以没有必要。少数据量或者数据离散度很高的情况下,还不如便利方便一些。

守不住的情 2022-09-18 19:52:58

都现代化社会了Map了解一下老铁,构建时用名称或者一个唯一值作为键就能索引用法参照

我是分割线
传送门Map-MDN

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文