indexOf的实现原理

75 阅读1分钟

今天闲来无事在看算法的线性搜索,突发奇想的想实现两个集合的并集。

思路: 要想实现两个集合A和B的并集操作,即要使得集合A=A ⋃ B,说白了,就是把存在B集合中但不存在集合A中的数据元素插入到集合A中即可。

let a = [1,2,3,4,5]
let b = [3,4]
for(let i= 0; i<b.length; i++){
   if(a.indexOf(b[i]) == -1){
       a.push(b[i])
   }
}
console.log(a) //[1, 2, 3, 4, 5]

//-------分割线

let a1 = [1,2,3,4,5]
let b1 = [3,4,6,7]
for(let i= 0; i<b1.length; i++){
   if(a1.indexOf(b1[i]) == -1){
       a1.push(b1[i])
   }
}
console.log(a1) //[1, 2, 3, 4, 5, 6, 7]

于是又分析了一波,如果不使用indexOf方法呢?

function customIndexOf(array, target) { 
    for (let i = 0; i < array.length; i++) { 
        if (array[i] === target) { 
          return i; // 返回找到的元素的索引 
        } 
    } return -1; // 如果未找到,返回 -1 
}

let a2 = [1,2,3,4,5]
let b2 = [3,4,6,7]
for(let i= 0; i<b2.length; i++){
   if(customIndexOf(a2, b2[i]) == -1){
       a2.push(b2[i])
   }
}
console.log(a2) //[1, 2, 3, 4, 5, 6, 7]

一个简易版的indexOf实现了,当然还有一些边界条件没有处理,实际开发中要处理异常情况

由此,我们能看出indexOf的原理是通过遍历数组中的每个元素,逐个比较元素的值与目标值是否相等,如果找到了相等的元素,则返回其索引,否则返回 -1 表示未找到。

前端小白,如有写的不准确的,望指正~