js 数组去重的6 种方法

531 阅读1分钟

前言

image.png

var repeatArr = [2, 1, 1, 10, 12, 5, 7, 7, 2, 1];

第一种:利用 es6 Set 类

function repeatArrFn1(arr) {
    return Array.from(new Set(arr)); 
}
function repeatArrFn10(arr) { 
    return [...new Set(arr)]
}

第二种: 利用对象键名的唯一性

function repeatArrFn2(arr) {
     var obj = {};
     arr.forEach(num =>!obj[num] && (obj[num] = 1));
   return Object.keys(obj).map(num =>+num); //这里的+号让字符串变成数字
}

第三种:一层 循环 + 数组 Api

function repeatArrFn3(arr) {
     var result = [],num;
    // arr.forEach(num => !result.includes(num) && result.push(num));
    arr.forEach(num => result.indexOf(num) === -1 && result.push(num)); //这种方法跟第四种比较相似
  return result;
}

第四种:利用数组下标去重


 function repeatArrFn4(arr){
    return arr.filter((num,index)=>index === arr.indexOf(num)) 
 }

第五种:双重循环

//用第一次循环的第一个值,跟第二次循环的每个值进行对比,如果没有相同的就存进result数组里
function repeatArrFn5(arr) {
   var result = [],flag;
   for (var i = 0; i < arr.length; i++) {
	flag = true;
	for (var j = i + 1; j < arr.length; j++) {
	    (arr[i] === arr[j]) && (flag = false);
	   }
	  flag && result.push(arr[i]);
	}
   return result;
}

第六种:利用 sort 排序后再处理

function repeatArrFn6(arr) {
	var temp = arr.sort();
	var result = [temp[0]]; //把1先存进去
	for (var i = 1; i < temp.length; i++) {
		if (temp[i] !== temp[i - 1]) {
			result.push(temp[i]);
		}
	}
   return result;
}