最近在刷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
}
主要优点
-
利用散列表的优势,当数据量大时查出一个元素很高效
主要缺点
- 对于有相同的数组元素的情况,后一个会覆盖前一个,需要做额外的一个判断与处理
- 显而易见的对于数据量较小的情况下,实现一个这样的方法没有必要
结论
- 使用indexOf,还是利用Map,需要结合实际的需求来做,但是利用Map实现一个indexOf,也不失为一个好的想法方向