数组去重方法
文章目录
方法一 双循环
双层循环,外层循环元素,内层循环时比较值
如果有相同的值则跳过,不相同则push进数组
方法二 利用splice直接在原数组进行操作
双层循环,外层循环元素,内层循环时比较值
值相同时,则删去这个值
注意点:删除元素之后,需要将数组的长度也减1
优点:简单易懂
缺点:占用内存高,速度慢
方法三 利用对象的属性不能相同的特点进行去重
方法四 数组递归去重
运用递归的思想
先排序,然后从最后开始比较,遇到相同,则删除
方法五 利用indexOf以及forEach遍历数组法
利用indexOf方法
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return
}
var array = [];
for (var i = 0; i < arr.length; i++) {
if (array .indexOf(arr[i]) === -1) {
array .push(arr[i])
}
}
return array;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
// [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}] //NaN、{}没有去重
方法六 利用ES6的set
Set数据结构,它类似于数组,其成员的值都是唯一的。
利用Array.from将Set结构转换成数组
拓展运算符(…)内部使用for…of循环
console.log([...new Set(arr1)])
方法七 数组下标判断法
使用indexOf方法,判断数组内第i个元素第一次出现在数组内的索引值是否为i,若i值相等,则把当前元素添加进新的数组中。
function unique2(arr){
var hash=[];
for (var i = 0; i < arr.length; i++) {
if(arr.indexOf(arr[i])==i){
hash.push(arr[i]);
}
}
return hash;
}
unique2([[1,2,3,4,2,4,5,6,7]])
//[1]