js数组去重方法

1.forEach+indexOf

const deduplication = (array) => {
// 补全代码
let newArr = []
array.forEach(item => {
if(newArr.indexOf(item) === -1) {
newArr.push(item)
}
});
return newArr
}

思路:创建一个新的数组,用于保存去重后的元素。通过forEach进行遍历,indexOf会查找数组中第一个符合的元素,如果不存在返回-1。通过判断该元素在新数组中是否存在,如果不存在就添加到新数组中,存在说明有重复,不添加。

方法2:Set去重

const deduplication =(array)=> {
    return Array.from(new Set(array))
}

Set数据结构可以实现去重,Array.from实现数组的拷贝。 

方法3:filter

const newArr = arr.filter((item, index) => {
    return arr.indexOf(item) == index
})

filter内部会自己返回一个新数组 。
返回的数组中的值在原数组中的第一个索引,如果是重复的元素,那么返回的该元素第一次出现的索引跟元素当前的索引不一致 则不会加入新数组中。

方法4:includes

let newArr = []
for (var i = 0; i < arr.length; i++) {
	if (!newArr.includes(arr[i]))  newArr.push(arr[i])
}

includes() 方法:用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false

方法5:reduce

const deduplication  = array => {
      return array.reduce((previous,current)=>{
          !previous.includes(current)&&previous.push(current)
              return previous
      },[])
}

 reduce方法 传入两个参数:第一个参数是一个回调函数,函数有两个参数 第一个参数是它是上一次调用回调时返回的累积值或者是reduce的第二个参数,这里是空数组[]。如果该参数有值, 那么reduce 回调函数的preValue就是这个值。第二个参数是当前要计算的值,我们判断当前要计算的值是否包含在上一次的计算结果previous中,如果不存在则将当前值加入到preValue中,最后返回这个previous即是去重后的数组。

 方法6:splice

const _deleteRepeat = array => {
    let a = array.sort((a,b)=>a-b) 
               for(let i = 0 ; i < a.length ; i++) {
                   if(Object.is(a[i],a[i+1])) {
                       a.splice(i+1,1)
                       i--
                    }
                }
                return a
            }

先将数组排序 然后循环遍历 如果当前a[i] 的值与 a[i+1]的值相等 那么就用splice方法 将a[i+1] 的值删除 splice删除元素时 传入的第一个参数是要删除的元素开始索引 第二个参数是要删除的个数 所以删除a[i+1]就是splice(i+1,1) 并且删除后 我们要将i-- 这是因为如果不i-- 就会执行for循环当中的i++ 会跳过当前元素并对下一个元素的值和后一个值进行比较 假如这个元素和i++前的元素是 重复的 便无法检测出来 所以应该先执行i-- 让当前元素先后退 然后在执行i++ 这样就可以比较当前 元素和下一个元素 不会导致有重复问题

方法7:哈希表Map去重

const arr = [1,2,2,3,3]
const map = new Map()

const newArr = []

arr.forEach( item => {
    if (!map.has(item)) {
        map.set(item, true)
        newArr.push(item)
    }
})

console.log(newArr);

 方法8:利用对象的key

let arr = [1,2,2,3,3,4]
let obj = {};
for (let i = 0; i < arr.length; i++) {
  let item = arr[i]
  if (obj[item] !== undefined) {
    arr.splice(i, 1);
    i--; // 解决删除元素后,数组塌陷问题
    continue;
  }
  obj[item] = item
}

//arr:[1,2,3,4]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值