数组去重

  const arr = [1, -1, NaN, 3, 'a', 3, NaN, {name: 'abc'}, {name: 'ABC'}]
  
  // ES5
  arr.filter(function(item, index) {
    return index === arr.indexOf(item)
  })  // [1, -1, 3, "a", { name: 'abc' }, { name: 'ABC' }] 因为Array.prototype.indexOf(NaN) => -1
  
  // ES5
  var exists = {};
  arr.filter(function(item) {
    if (!exists[item]) {
      exists[item] = true   
      return true
    }
  }) //  [1, -1, NaN, 3, "a", { name: 'abc'}] 并且时间复杂度为O(n), { name: 'abc' }与{ name: 'ABC' }在这里重复的原因是方括号[]内会转化成字符串,Object.prototype.toString.call({name: 'abc'}) -> '[object Object]'
  
  // ES6
  [...new Set(arr)] // [1, -1, NaN, 3, "a", { name: 'abc' }, { name: 'ABC' }]
  // 知识点:ES6 Set以及Symbol.iterator
  

转载于:https://www.cnblogs.com/guanine/p/9216942.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值