第一种:
实现思路:双层循环,外循环表示从0到arr.length,内循环表示从i+1到arr.length
将没重复的右边值放入新数组。(检测到有重复值时终止当前循环同时进入外层循环的下一轮判断)
function unique4(arr){
var hash=[];
for (var i = 0; i < arr.length; i++) {
for (var j = i+1; j < arr.length; j++) {
if(arr[i]===arr[j]){ ++i;
}
}
hash.push(arr[i]);
}
return hash;
}
第二种方法:
var arr = [1, 2, 4, 3, 6, 7, 4, 7, 8, 3, 3, 2];
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--;
}
}
}
console.log(arr);
第三种方法:
var arr = [1, 2, 4, 3, 6, 7, 4, 7, 8, 3, 3, 2];
var arr2 = [];
for (var i = 0; i < arr.length; i++) {
if (arr2.indexOf(arr[i]) === -1) {
arr2.push(arr[i]);
}
}
console.log(arr2);
第四种ES6方法:
let arr = [1, 2, 4, 3, 6, 7, 4, 7, 8, 3, 3, 2];
let arr2 = new Set(arr);
let arr3 = Array.from(arr2);
console.log(arr3);
第五种:
利用Map对象和数组的filter方法
1.Map对象是ES6提供的一个新的数据结构,其中has的办法是返回一个布尔值,表示某个值是否存在当前的Mp对象之中,set的办法是给Map对象设置key/value。
2.filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
let arr1 = [1, 2, 4, 3, 6, 7, 4, 7, 8, 3, 3, 2];
function unique(arr) {
const res = new Map();
return arr.filter((a) => !res.has(a) && res.set(a, 1));
}
var newArr = unique(arr1);
console.log(newArr);
第六种:利用Set+扩展运算符 …
var arr1 = [1, 2, 4, 3, 6, 7, 4, 7, 8, 3, 3, 2];
var newArr = [...new Set(arr1)];
console.log(newArr);