js 数组去重
方法一
原理 :循环嵌套,一一对比
详情:定义新数组并存放原数组第一个元素,将元素组一一和新数组元素对比,若不同则存放在新数组中
代码:
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; }
方法二
原理:有序数组,前后对比
详情:原数组排序生成数组2,定义新数组并存放数组2第一项,数组2的元素一一与新数组的最后一项对比,若不同存于新数组
代码:
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; }
方法三
原理:利用对象属性
详情:定义空的新数组,遍历原数组,查询对象中有没有原数组元素对象属性,若没有对象添加新属性值1,新数组添加元素
代码:
function unique3(arr){ var arr2=[]; var obj={}; for(var i=0;i<arr.length;i++){ if(!obj[arr[i]]){ obj[arr[i]]=1; arr.push(arr[i]); } } return arr2; }
方法四:
原理:数组 indexOf方法或includes方法,查找数组中有没有某一值
详情:定义新数组,遍历原数组,在新数组中查找原数组每一元素的位置,若-1则添加进新数组
代码:
//indexOf function unique4(arr){ var arr2=[]; for(var i=0;i<arr.length;i++){ if(arr2.indexOf(arr[i])<0){ arr2.push(arr[i]); } } return arr2; } //includes function unique4(arr){ var arr2=[]; for(var i=0;i<arr.length;i++){ if(arr2.includes(arr[i])){ arr2.push(arr[i]); } } return arr2; }
方法五
原理:数组filter或forEach方法+includes或indexOf
详情:看代码
代码:
//indexOf+filter function unique(arr){ return arr.filter(function(element,index,self){ return self.indexOf(element)===index; }) } //includes+filter function unique(arr){ var arr2=[]; arr.filter(function(element){ return arr2.includes(element)?"":ar2.push(element); }) return arr2; } //indexOf+forEach function unique(arr){ return arr.forEach(function(element,index,self){ return self.indexOf(element)===index; }) } //includes+forEach function unique(arr){ var arr2=[]; arr.forEach(function(element){ return arr2.includes(element)?"":ar2.push(element); }) return arr2; }
方法六:
原理:ES6 set
代码:
function unique(arr){ //Set数据结构,它类似于数组,其成员的值都是唯一的 return Array.from(new Set(arr)); // 利用Array.from将Set结构转换成数组 }
另:欢迎补充