数组去重

es6去重

function unique(arr) {
	return Array.from(new Set(arr))
}
	var arr = [1, 1,2,3,4,1,23,14,25,66,22,2,1,4,22];
console.log(unique(arr))

不考虑兼容性,这种去重的方法代码最少。

for循环去重

var arr = [1, 1,2,3,4,1,23,14,25,66,22,2,1,4,22];
		function unique(arr) {
			for (var i = 0; i < arr.length; i++) {
				for (var j = i + 1; j < arr.length; j++) {
					if (arr[i] == arr[j]) {
						arr.splice(j, 1);
						j--
					}
				}
			}
			return arr
		}
		console.log(unique(arr))

双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值。

indexOf去重


function unique(arr) {
	let array=[];
	for(var i=0; i<arr.length;i++){
		if(array.indexOf(arr[i])==-1){
			array.push(arr[i])
		}
	}
	return array
}
var arr = [1, 1,2,3,4,1,23,14,25,66,22,2,1,4,22];
console.log(unique(arr))

新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组。

利用sort

function unique(arr) {
			arr = arr.sort();
			let array = [];
			for (var i = 0; i < arr.length; i++) {
				if (arr[i] != arr[i - 1]) {
					array.push(arr[i])
				}
			}
			return array;
		}
		var arr = [1, 1, 2, 3, 4, 1, 23, 14, 25, 66, 22, 2, 1, 4, 22];
		console.log(unique(arr))

利用sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对。

includes

function unique(arr) {
			var array = [];
			for (var i = 0; i < arr.length; i++) {
				//includes 检测数组是否有某个值
				if (!array.includes(arr[i])) {
					array.push(arr[i]);
				}
			}
			return array;
		}
		var arr = [1, 1, 2, 3, 4, 1, 23, 14, 25, 66, 22, 2, 1, 4, 22];
		console.log(unique(arr))

includes 检测数组是否有某个值

hasOwnProperty

function unique(arr) {
			var obj = {};
			return arr.filter(function (item, index, arr) {
				return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
			})
		}
		var arr = [1, 1, 2, 3, 4, 1, 23, 14, 25, 66, 22, 2, 1, 4, 22];
		console.log(unique(arr))

利用hasOwnProperty 判断是否存在对象属性

filter

function unique(arr) {
			return arr.filter((item,index,arr)=>arr.indexOf(item,0)===index)
		}
		var arr = [1, 1, 2, 3, 4, 1, 23, 14, 25, 66, 22, 2, 1, 4, 22];
		console.log(unique(arr))

New map

function unique(arr) {
			let map=new Map();
			let array=new Array();
			for(var i=0; i<arr.length;i++){
				if(map.has(arr[i])){
					map.set(arr[i],true)
				}else{
					map.set(arr[i],false)
					array.push(arr[i])
				}
			}
			return array
		}
		var arr = [1, 1, 2, 3, 4, 1, 23, 14, 25, 66, 22, 2, 1, 4, 22];
		console.log(unique(arr))

ramda

R.uniq(arr);

数组去重
https://blog.fullsize.cn/2021/04/13/notion/shu-zu-qu-chong/
作者
fullsize
发布于
2021年4月13日
许可协议