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

最近在刷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?这有更好的替代品)