javascript数组去重的几种方法

1.利用ES6的Set集合进行去重:

Array.prototype.distinct = function(){
   let arr = this;
   return Array.from(new Set(arr));
}
let testArr = [1,1,1,2,2,3,3];
testArr.distinct();//[1,2,3]

2.通过splice去重:

通过双层循环,两两比较值,如果值相同就把这个元素删掉,注意由于splice会影响数组的结构,所以删除后对应数组长度也应该减去1;js代码如下:

Array.prototype.distinct = function() {
	var arr = this;
	var i,
	 	j,
	 	len=arr.length;
	 	for(i=0;i<len;i++){
	 		for(j=i+1;j<len;j++){
	 			if(arr[i]===arr[j]){
	 				arr.splice(j,1);
	 				j--;
	 				len--;
	 			}
	 		}
	 	}
	 	return arr;
};
var testArr = [1,2,3,3,4,1,2,2,2,"a","a",1];
console.log(testArr.distinct());//[1,2,3,4,"a"]

3.借助对象属性的唯一性,通过把数组的值作为属性,去进行遍历判断,如果属性相同则跳过,不同则加入新的数组里,js代码如下:

Array.prototype.distinct = function() {
	// body...
	var arr = this;
	var i,
	 	j,
	 	obj={},
	 	arrNew=[],
	 	len=arr.length;
	 	for(i=0;i<len;i++){
	 		if(!obj[arr[i]]){
	 			obj[arr[i]]='xx';
	 			arrNew.push(arr[i]);
	 		}
	 	}
	 	return arrNew;
};
var testArr = [1,2,3,3,4,1,2,2,2,"a","a"];
console.log(testArr.distinct());//[ 1, 2, 3, 4, 'a' ]

注意:以上方法都不能去重数组中的对象,因为{a:1}==={a:1}返回的是false


阅读更多

没有更多推荐了,返回首页