1.参考
- 1、利用 ES6的set 方法。
let unique = arr => Array.from(new Set(arr))
let unique = arr => [...new Set(arr)]
-
2、通过判断索引indexOf
- 2.1 索引不是第一个索引,说明是重复值
let unique = arr => arr.filter((item, index) => arr.indexOf(item) === index) -
3、新建一个数组,判断新数组中是否有某个值,如果没有就push,具体判断方法有:
- 3.1通过indexOf查找,如果找不到就返回-1,找到就返回下标。
let unique = arr => { var newArr = []; arr.forEach(item => { if(newArr.indexOf(item) === -1) newArr.push(item) }); return newArr; }- 3.2通过lastIndexOf反向查找 ,lastIndexOf从后往前查,返回的下标(index)是从前往后排序的(和indexOf一样),如果有数组中有相同元素,则是先返回最后边的一个位置。
function unique9(arr){ var res = []; for(var i=0; i<arr.length; i++){ res.lastIndexOf(arr[i]) !== -1 ? '' : res.push(arr[i]); } return res; } console.log(unique9([1,1,2,3,5,3,1,5,6,7,4]));- 3.3先排序,检查相邻元素是否相等,如果不相同就往新数组中push。
let unique = arr => { var newArr = []; arr.sort(); arr.forEach((item, index) => { if( arr[index] !== arr[index+1]){ newArr.push(arr[i]); } }) return newArr; }- 3.4 forEach遍历,用数组原型对象上的includes方法判断新数组中是否有某个值,如果没有就push。
function unique7(arr){ var res = []; arr.forEach(function(item){ res.includes(item) ? '' : res.push(item); }); return res; } console.log(unique7([1,1,2,3,5,3,1,5,6,7,4]));- 3.5 for循环和includes结合,如果不包含就push。
function unique5(arr){ var res = []; for(var i=0; i<arr.length; i++){ if( !res.includes(arr[i]) ){ // 如果res新数组包含当前循环item res.push(arr[i]); } } return res; } console.log(unique5([1,1,2,3,5,3,1,5,6,7,4]));- 3.6 用filter方法 判断新数组中是否有某个值,如果没有就push。
function unique6(arr){ var res = []; res = arr.filter(function(item){ return res.includes(item) ? '' : res.push(item); }); return res; } console.log(unique6([1,1,2,3,5,3,1,5,6,7,4])); -
4,利用数组原型对象上的 splice 方法。 *
function unique8(arr){ var i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] == arr[j]){ arr.splice(j,1); len--; j--; } } } return arr; } console.log(unique8([1,1,2,3,5,3,1,5,6,7,4])); -
5,利用对象属性存在的特性,如果没有该属性则存入新数组。
function unique3(arr){
var res = [];
var obj = {};
for(var i=0; i<arr.length; i++){
if( !obj[arr[i]] ){
obj[arr[i]] = 1; //顺便给个属性值
res.push(arr[i]);
}
}
return res;
}
console.log(unique3([1,1,2,3,5,3,1,5,6,7,4]));
- 嵌套循环,定义一个Boolean值,如果不相同,定义为true,如果true就push。
function unique(arr){
var res = [arr[0]];
for(var i=1; i<arr.length; i++){
var repeat = false;
for(var j=0; j<res.length; j++){
if(arr[i] === res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(arr[i]);
}
}
return res;
}
console.log(unique([1,1,2,3,5,3,1,5,6,7,4]));