美文网首页JavaScript 进阶营让前端飞
还在用indexOf?这有更好的替代品

还在用indexOf?这有更好的替代品

作者: Indomi | 来源:发表于2019-11-18 16:59 被阅读0次

最近在刷LeetCode的过程中,越来越发现ES6新增的Set/Map数据结构非常方便。于是乎,想起来平常使用indexOf,是不是有更好的替代方案呢?

利用Map数据结构实现查找也许更高效(当然也有弊端,看下文)

Map实现数组的查找

Array.prototype._indexOf = function (key) {
  const arr = this
  const idxMap = new Map()
  // 具体小细节边界判断都忽略,实现功能为主
  arr.forEach((v, i) => {
    idxMap.set(v, i)
  })
  return idxMap.has(key) ? idxMap.get(key) : -1
}

主要优点

  • 利用散列表的优势,当数据量大时查出一个元素很高效


    数组长度为100w的对比

主要缺点

  • 对于有相同的数组元素的情况,后一个会覆盖前一个,需要做额外的一个判断与处理
  • 显而易见的对于数据量较小的情况下,实现一个这样的方法没有必要

结论

  • 使用indexOf,还是利用Map,需要结合实际的需求来做,但是利用Map实现一个indexOf,也不失为一个好的想法方向

相关文章

  • 还在用indexOf?这有更好的替代品

    最近在刷LeetCode的过程中,越来越发现ES6新增的Set/Map数据结构非常方便。于是乎,想起来平常使用in...

  • 如何在JavaScript中更好的使用数组

    如何在JavaScript中更好的使用数组 使用Array.includes替代Array.indexOf ind...

  • 人生要懂得的40个道理(下)

    21.不要总是抱怨,生活不会因为抱怨变得更好。 22.不要因为便宜买替代品,替代品永远解决不了你的最终需求。 23...

  • SpringBoot网络请求WebClient

    WebClient是RestTemplete的替代品,有更好的响应式能力,支持异步调用,可以在Springboot...

  • 牛逼人的“点滴小事",能入你的法眼吗?

    放眼望去,这世上的牛人还真不少,张三说:“要是有他的条件,我能比他更好!"李四说:“这有什么,他是走运赶上...

  • 11.30《财富自由》

    时常问自己,什么好,什么更好,什么最好。这有利于培养我们做出更好选择的能力。

  • indexOf

    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置 如果-1 ,表示这个字符串里没有指定的字符串值

  • indexOf

    今天看书才发现,indexOf()查找数组中特定的项,然后返回该项的索引,indexOf()是使用全等运算符(==...

  • indexOf

    string.indexOf(searchvalue,fromIndex) 参数 描述 searchvalue 必...

  • indexOf

    获取数组中某个指定的元素位置。 常用来判断是否在数组中

网友评论

    本文标题:还在用indexOf?这有更好的替代品

    本文链接:https://www.haomeiwen.com/subject/ofebictx.html