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

如何实现一个索引数组?

场景

像下面这段代码

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: 结构化的数据库一般都有索引这种功能,为何程序中反而没有呢?
阅读 1.9k
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], []);

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

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

我是分割线
传送门Map-MDN

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题