<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> //第一种 function uniq(array){ var temp = []; //一个新的临时数组 for(var i = 0; i < array.length; i++){ if(temp.indexOf(array[i]) == -1){ temp.push(array[i]); } } return temp; } var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5]; console.log(uniq(aa)); //第二种 function uniq1(array){ var temp = []; var index = []; var l = array.length; for(var i = 0; i < l; i++) { for(var j = i + 1; j < l; j++){ console.log(array[i],array[j]) if (array[i] === array[j]){ i++; j = i; } } temp1.push(array[i]); index.push(i); } console.log(index); return temp1; } var aa = [1,2,2,3,5,3,6,5]; console.log(uniq1(aa)); //第三种 function unique3 (arr) { return Array.from(new Set(arr)) } var arr = [55,66,77,77,88,88,99]; console.log(unique3(arr)) var arr1 = [554,66,77,77,88,88,99]; console.log(...new Set(arr1)) //第三种 es6中的set方法 let arr2 = [1,2,3,4,5,6,7,8,9] let set = new Set(arr2) console.log(Array.from(set)) //第四种 function noRepeat1(arr3){ // 第一层for用来控制循环的次数 for(var i=0; i<arr3.length; i++){ //第二层for 用于控制与第一层比较的元素 for(var j=i+1; j<arr3.length; j++){ //如果相等 if(arr3[i] == arr3[j]){ //删除后面的 即第 j个位置上的元素 删除个数 1 个 arr3.splice(j,1); // j--很关键的一步 如果删除 程序就会出错 //j--的原因是 每次使用splice删除元素时 返回的是一个新的数组 // 这意味这数组下次遍历是 比较市跳过了一个元素 /* 例如: 第一次删除后 返回的是 1 1 3 2 1 2 4 * 但是第二次遍历是 j的值为2 arr[2] = 3 * 相当于跳过一个元素 因此要 j-- * */ j--; } } } return arr3; } var bb = [1,1,1,3,5,3,6,5]; console.log(noRepeat1(bb)) //第五种 function noRepeat(arr){ arr.sort(); //先排序 从小到大排序 for(var i = 0; i < arr.length-1;i++){ //两个进行比较 一样删除后面的 if(arr[i]==arr[i+1]){ arr.splice(i,1); //i-- 和j--同理 i--; } } return arr; } var bbd = [1,8,1,3,5,8,6,5]; console.log(noRepeat(bbd)) </script> </body> </html>