最近在工作中用到数组去重,本来以为很简单的问题,Array.from和Set结合直接去重,然后发现没有变化!还以为这个去重方法不管用,又试了“去重大套餐”,发现全部NG。

卧槽,发生了什么,为什么全部失效!

js数组去重:数组中包含对象,根据对象的某个属性去重-Qui-Note

最后发现这些去重套餐只对简单的数组生效,如:["1",1,"1",0,"2"],对于如下的包含对象的数组就不能愉快的玩耍了。

let arr = [
	{name:'张三'},
	{name:'张三2'},
	{name:'张三'},
	{name:'张三3'},
];

原理

然后想到一个骚操作,就是循环这个数组的每一对象的name,作为一个新数组,然后判断这个值是否重复,重复值的索引值与这个对象的索引值是同一位置,然后再过滤掉这个对象。这样就巧妙的解决对数组中包含对象重复去重的方法。代码如下:

function removeDuplicate(arr) {
	let newArr = [];
	for(let item of arr){
		newArr.push(item.name)
	}
	let res = [];//存放去重属性值
	let org = [];//存放去重后数组
	for (let i=0;i<newArr.length;i++) {
		if( !res.includes( newArr[i]) ) {//includes 检测数组是否有某个值
		                res.push(newArr[i]);
		                org.push(arr[i]);
		 }
	}
  	
	return org;
} 


是不是很骚,哈哈哈!当我这样循环出想要的数组之后,隔壁的同事不自觉的竖起了大拇指!真棒,确实是取巧了,巧就巧在索引值一样,去重属性值的时候也在去重对象!好久不更新文章了,最近忙着上班,偶尔开发一下新主题,进度如同蜗牛,粉丝快骂死我了。