簡單一維數組的去重方法有不少,這種數組裏面的值都是普通的數據類型,並無對象,所以去重方法有不少,這裏總結一下經常使用的四種方法(網上還有一些其它的方法):
方法一:雙層循環去重數組
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');