JS 数组去重的方法
方法一:多层循环比较
利用splice的特性,比较两个数是否相同,获得相同元素的下标,删除相同元素,改变原数组,获得去重后的数组
function uniqueArr(arr){ for(var i = 0;i < arr.length ;i++){ for(var j = i + 1;j < arr.length - 1; j++){ if(arr[i] == arr[j]){ arr.splice(j,1); } } } return arr; }
方法二:利用indexOf()
设置一个新的数据用来接收数据,利用indexOf 来判断 数据是否存在于 新数组中,不存在,则添加进去,获得去重后的新数组
function uniqueArr(arr){ var newArr = []; for(var i = 0;i < arr.length;i++){ if(newArr.indexOf(arr[i]) < 0){ newArr.push(arr[i]); } } return newArr; }
方法三:对象键值对法
定义一个对象,用数组中的元素作为对象属性名,如果对象名不存在,那么将该元素添加到新数组中,给对应的属性值 设置 一个值作为标记,不一定为1,获得去重后的新数组
function uniqueArr(arr){ var obj = {}; var newArr = []; for(var i = 0;i < arr.length;i++){ if(!obj[arr[i]]){ obj[arr[i]] = 1; newArr.push(arr[i]); } } return newArr; }
方法四:
定义一个新数组,将 arr 的第一个值添加到新数组中作为比较对象,遍历从数组的第二个值开始逐一比较 push 后的新数组中每个元素比较,看是否有相同的,不同就添加,获得不重复新数组
function uniqueArr(arr){ var newArr = [arr[0]]; for(var i = 1;i < arr.length;i++){ var flag = false; for(var j = 0;j < newArr.length;j++){ if(newArr[j] === arr[i]){ flag = true; break; } } if(!flag) newArr.push(arr[i]); } return newArr; }
方法五:先排序,再相邻两两比较
function uniqueArr(arr){ arr.sort(); for(var i = 0;i < arr.length;i++){ if(arr[i] === arr[i-1]){ arr.splice(i,1); } } return arr; }
方法六:利用indexOf和 lastIndexOf方法判断
利用indexOf() 方法的特性,从数组下标0开始查找元素,返回第一次出现位置的下标,lastIndexOf() 从数组末尾开始查找元素,返回从后向前找到元素的第一次出现位置的下标。
如果从数组开始进行查找 的元素和从后进行查找的元素 下标相同,表示找到的是同一个元素。
function uniqueArr(arr){ for(var i = 0;i < arr.length;i++){ if( arr.indexOf(arr[i]) !== arr.lastIndexOf(arr[i])){ arr.splice(arr.lastIndexOf(arr[i]),1); } } return arr; }
方法七:ES6 Set()方法
new Set() 方法不允许有重复数据,但是返回的是一个类数组,所以要用 Array.from()方法转换成数组
function uniqueArr(arr){ return Array.from(new Set(arr)); }
来源:https://www.cnblogs.com/ybzy/p/12593344.html