为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

如何实现一个索引数组?场景像下面这段代码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: 结构化的数据库一般都有索引这种功能,为何程序中反而没有呢?
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

你可以自己做一个反向索引(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], []);

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


查看完整回答
反对 回复 2019-05-19
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

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

我是分割线
传送门Map-MDN


查看完整回答
反对 回复 2019-05-19
  • 2 回答
  • 0 关注
  • 794 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信