js 手写数组去重
1、通过遍历原数组和新数组是否重复。new一个新数组存放已经遍历过的、唯一的元素。
function uniqueArr(list){ var newArr= [list[0]]; for(var i=1;i<list.length;i++){ var isRepeat = false; for(var j=0;j<newArr.length;j++){ if(list[i] == newArr[j]){ isRepeat= true; break; } } if(!isRepeat){ newArr.push(list[i]); } } return newArr; } var arr=['a','b','c','a','b']; uniqueArr(arr); //output:["a", "b", "c"]
var arr=[1,1,1,'1']; uniqueArr(arr); //output:[1]
var arr=[1,1,1,'1',,,,]; uniqueArr(arr); //output:[1,undefined]
2、通过先排序,再与相邻的元素进行比较去重(排序之后相同的元素会相邻)
function uniqueArr(list){ list.sort();//对数组进行排序 var newArr= []; for(var i=1;i<list.length;i++){ if(list[i]!==list[i+1]) newArr.push(list[i]); } return newArr; } var arr=['a','b','c','a','b']; uniqueArr(arr); //output:["a", "b", "c"]
var arr=[1,1,,,1,'1']; uniqueArr(arr); //output:["1",1]
3、新建一个对象进行存放,再遍历数组,判断对象是否存在该值(obj[i])
function uniqueArr(list){ var obj= {},newArr=[list[0]]; obj[list[0]]=true; for(var i=1;i<list.length;i++){ if(!obj[list[i]]){ obj[list[i]]=true; newArr.push(list[i]); } } return newArr; } var arr=['a','b','c','a','b']; uniqueArr(arr); //output:["a", "b", "c"]
var arr=[1,1,,,1,'1']; uniqueArr(arr); //output:[1,undefined]
4、通过indexOf进行判断(新建一个数据存放唯一的元素,遍历原数组判断(newArr.indexOf(oldArr[i])==-1))
function uniqueArr(list){ var newArr=[list[0]]; for(var i=1;i<list.length;i++){ if(newArr.indexOf(list[i])==-1){ newArr.push(list[i]); } } return newArr; } var arr=['a','b','c','a','b']; uniqueArr(arr); //output:["a", "b", "c"]
var arr=[1,1,,,1,'1']; uniqueArr(arr); //output:[1, undefined, '1']
5、使用ES6 SET数据结构进行去重:
function dedupe(array) { return Array.from(new Set(array)); } dedupe([1, 1, 2, 3]) // [1, 2, 3]
dedupe([1, '1',,, 2, 3]) // [1, '1', undefined, 2, 3]
6、通过indexof与filter 进行去重
function distinct(numberArr) { return numberArr.filter((item, index) => { return numberArr.indexOf(item) === index }) }
var arr=[1,1,,,1,'1'];
distinct(arr); //[1, '1']
7、通过使用for…of 和include进行去重
function distinctInclude(numberArr) { let result = [] for (let i of numberArr) { !result.includes(i) && result.push(i) } return result }
var arr=[1,1,,,1,'1'];
distinctInclude(arr);//[1, undefined, '1']