猿问

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

如何实现一个索引数组?

场景

像下面这段代码


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


冉冉说
浏览 834回答 2
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
随时随地看视频慕课网APP
我要回答