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;
}
//includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false。
第四种:利用数组下标去重
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;
}