目录
第一种:将原数组排序,在与相邻的进行比较,如果不同则存入新数组。
第三种:利用数组的indexOf下标属性来查询。(推荐,很简便易懂,内存消耗低)
第五种:利用数组原型对象上的 filter 和 includes方法。
第六种:利用数组原型对象上的 forEach 和 includes方法。
第一种:将原数组排序,在与相邻的进行比较,如果不同则存入新数组。
function unique2(arr){ var arr2 = arr.sort(); var res = [arr2[0]]; for(var i=1; i<arr2.length; i++){ if(arr2[i] !== res[res.length-1]){ res.push(arr2[i]); } } return res; } console.log(unique2([1,1,2,3,5,3,1,5,6,7,4]));
第二种: 利用对象不能存储重复属性的特性(哈希思想)
我的官方解释:哈哈哈嗝, 对象也是存储属性名的数组 abj[arr[i]] arr[i]的值对应的就是key ,然后value 得obj自己赋值 如果arr[a]=arr[b] 就是key相等 就 !abj[arr[i]] 就不会进入循环
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]));
第三种:利用数组的indexOf下标属性来查询。(推荐,很简便易懂,内存消耗低)
indexOf方法 原理是: indexOf方法找到指定值时返回元素下标,未找到时返回-1, 找到了就返回它值的下标。
function unique4(arr){ var res = []; for(var i=0; i<arr.length; i++){ if(res.indexOf(arr[i]) == -1){ res.push(arr[i]); } } return res; } console.log(unique4([1,1,2,3,5,3,1,5,6,7,4]));
第四种方法:利用数组原型对象上的includes方法。
includes() 方法用于判断字符串是否包含指定的子字符串,或者判断数组中是否有指定的元素。
例如:[‘hellow’,‘world’].includes(‘hellow’) ,如果数组存在指定元素就会返回true,没有就返回false。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]));
第五种:利用数组原型对象上的 filter 和 includes方法。
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]));
第六种:利用数组原型对象上的 forEach 和 includes方法。
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]));
方法七:利用数组原型对象上的 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]));
第八种方法:利用 ES6的set 方法
function unique10(arr){ //Set数据结构,它类似于数组,其成员的值都是唯一的 return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组 } console.log(unique10([1,1,2,3,5,3,1,5,6,7,4]));
面试题30:JS数组去重的八种方法
最新推荐文章于 2024-02-22 14:46:05 发布