set方法简易数组去重/hasOwnProperty包含对象的数组去重

首先找一个含有多种类型数据的数组

const pardonArr = [1, 1, 1, 3, 3, 3, 4, 4, 4, 45, 5, 
                   55, 5, 6, 6, 6, 6, 7, 7, 7, 8, 8, 8, 
                   'true', 'true', 'true',true, true, 
                   {name: 1,age: 2}, {name: 1,age: 2}]

通过set方法对数组进行去重尝试,通过Array.from转换成数组类型

let newArr = Array.from(new Set(pardonArr)) 
console.log(newArr)

会发现除了数组里的对象外,其他类型的数值都完成了去重,基本达到了简易数据的去重需求

要想去重包含对象的数组,推荐使用hasOwnProperty方法来完成

数组还是同样的

var obj = {}; //定义空对象备用
  function unique(arr) { //编写去重方法
    return arr.filter(function(item, index, arr) { 
      //利用filter特性,filter(true)时返回所有值,filter(false)时不返回任何值
	  return obj.hasOwnProperty(typeof item+item)?false:(obj[typeof item+item]=true)
    })
  }
/*通过hasOwnProperty方法判定对象数否具有该值,如果已具有,filter方法会把此处值写进数组,
has方法返回true,为避免第二次写入重复值,has方法判定true即对象内已有此属性即此处数组值已保留,
通过三目运算改写值为false返还给filter方法,如果has方法判定对象内没有此属性,
证明之前未将此值写入数组,故将此处属性写入对象,属性值为任何数均可,
综上,创建的对象内判定没有数组值对应属性,写入属性使has判定为true返还给fliter写入数组,
对象内如已有此值,has判定为true,通过三目运算改写为false返回给filter,
filter判定不予写入数组*/

编写方法来实现功能,数组使用该方法即可完成包含对象的去重

console.log(unique(pardonArr)) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值