1.通过循环遍历数组,根据判断flag的值来确定是否将值放入到数组中
1 //数组去重: 2 var arr = [5,1,2,1,2,2,1,2,1,2,3,4,3,4,5,3,4,5,4,3,2,1]; 3 //希望得到的结果为[1,2,3,4,5] 4 //1 创建一个结果数组 5 var resultArr = [arr[0]]; 6 var flag; 7 //2 遍历数组 8 for(var i = 1; i < arr.length; i++){ 9 // 正确的实现方式 10 flag = true;//假设当前arr[i]可以放入到resultArr中 11 for(j = 0; j < resultArr.length; j++){ 12 //设置可以让假设失败的条件:如果偶遇任何一个元素相等,即说明不能放入 13 if(arr[i] === resultArr[j]){ 14 flag = false; 15 } 16 } 17 //根据flag的值设置最终操作 18 if(flag){ 19 resultArr.push(arr[i]); 20 } 21 } 22 console.log(resultArr);
2.通过Es6语法进行数组去重
1 //先定义一个重复的数组 2 var arr = [1,1,2,2,2,3,3,4,4] 3 4 var set = new Set(arr) // {1,2,3,4} 5 var newArr = Array.from(set) // 再将set转变成array 6 console.log(newArr) // [1,2,3,4]
实现的原理:Set
于Array
的区别在于:Array
中允许出现重复的元素,例如[1,2,2,3]
;而Set
中的所有元素都是唯一的,只能是{1,2,3}
。利用这一特性,我们就可以迅速地去掉数组中重复的元素。
3.通过创建空对象,对象里面的属性名是数组的每个值,可以计算每个值重复的个数
1 //使用数据存储功能完成数组去重并计数的案例 2 var arr = [5,1,2,1,1,2,3,2,2,1,2,1,2,3,4,3,4,5,3,4,5,4,3,2,1];//货车 3 //创建一个货物单 4 var obj = {}; 5 var item 6 //将货车中的货物一个个的拿过来看 7 for(var i = 0;i<arr.length;i++){ 8 //看一看arr[i]这个货物有没有(检测obj中是否含有arr[i]这个属性) 9 item = arr[i]; 10 //如果有值,这个值一定大于等于1 11 //如果没有,默认为undefined 12 if(obj[item]){ 13 //说明有值,让值++ 14 obj[item]++; 15 }else{ 16 //说明没有值,设置值为1 17 obj[item] = 1; 18 } 19 20 } 21 console.log(obj);