简单一维数组的去重方法有不少,这种数组里面的值都是普通的数据类型,并无对象,所以去重方法有不少,这里总结一下经常使用的四种方法(网上还有一些其它的方法):
方法一:双层循环去重数组
function uniqueArr(arr) { var result = []; for (var i = 0; i < arr.length; i++) { for (var j = i + 1; j < arr.length; j++) { if (arr[i] === arr[j]) { j = ++i; } } result.push(arr[i]); } return result; }
方法二:利用对象的属性不能相同去重code
function uniqueArr(arr) { var result = []; var obj = {}; for (var i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { obj[arr[i]] = 1; result.push(arr[i]); } } return result; }
方法三:利用下标对象
function uniqueArr(arr) { var result = [arr[0]]; for (var i = 1; i < arr.length; i++) { if (result.indexOf(arr[i]) == -1) { result.push(arr[i]); } } return result; }
方法四:ES6去重hash
function uniqueArr(arr) { return Array.from(new Set(arr)); }
假设有这样的一个二维数组,数组里面多个对象的属性至少有一个都同样,那就该如何去除重复的数据呢?这里总结一下两种方法:
方法一:双重循环去除法it
function uniqueArr(arr, key) { var newArr = []; for (var i = 0; i < arr.length; i++) { var flag = true; for (var j = 0; j < newArr.length; j++) { if (arr[i][key] == newArr[j][key]) { flag = false; } } if (flag) newArr.push(arr[i]); } return newArr; }
方法二:利用reduce来实现io
function uniqueArr(arr, key) { var hash = {}; return arr.reduce(function(item, next) { hash[next[key]] ? '' : hash[next[key]] = true && item.push(next); return item }, []); }
例子:function
var arr = [{ id: '001', name: 'Jack' }, { id: '002', name: 'Eric' }, { id: '003', name: 'Tom' }, { id: '003', name: 'Lucy' }, { id: '002', name: 'Lucy' }, { id: '004', name: 'Jacky' }, ] uniqueArr(arr, 'id');