1、数组去重
方法一、
//定义一个新数组,然后将原数组和新数组的每一个元素进行对比,若不同,则放在新数组中 function unique(arr){ var bArr= [arr[0]]; for(var i=1; i<arr.length; i++){ var repeat = false; for(var j=0; j<bArr.length; j++){ if(arr[i] === bArr[j]){ repeat = true; break; } } if(!repeat){ bArr.push(arr[i]); } } return bArr; } function unique(arr){ var hash=[]; for (var i = 0; i < arr.length; i++) { for (var j = i+1; j < arr.length; j++) { if(arr[i]===arr[j]){ ++i; } } hash.push(arr[i]); } return hash; }
方法二、
//先将原数组排序,再将每一个元素与相邻元素比较,如果不同则存入新数组 function unique2(arr){ var arr = arr.sort(); var bArr= [arr[0]]; for(var i=1; i<arr.length; i++){ if(arr2[i] !== bArr[bArr.length-1]){ bArr.push(arr[i]); } } return bArr; }
方法三、
//利用对象属性存在的特性,如果没有该属性,则存入新数组 function unique3(arr){ var bArr= []; var obj = {}; for(var i=0; i<arr.length; i++){ if( !obj[arr[i]] ){ obj[arr[i]] = 1; bArr.push(arr[i]); } } return bArr; }
方法四、
//利用数组 indexOf下标属性来查询 function unique4(arr){ var bArr= []; for(var i=0; i<arr.length; i++){ if(bArr.indexOf(arr[i]) == -1){ bArr.push(arr[i]); } } return bArr; }
方法五、
//利用数组原型对象上的includes方法 function unique5(arr){ var bArr= []; for(var i=0; i<arr.length; i++){ if( !bArr.includes(arr[i]) ){ // 如果bArr新数组包含当前循环item bArr.push(arr[i]); } } return bArr; }
方法六、
//利用数组原型对象上的filter和includes方法 function unique6(arr){ var bArr= []; bArr= arr.filter(function(item){ return bArr.includes(item) ? '' : bArr.push(item); }); return bArr; }
方法七、
//利用数组原型对象上的forEach和includes方法 function unique7(arr){ var bArr= []; arr.forEach(function(item){ bArr.includes(item) ? '' : bArr.push(item); }); return bArr; }
方法八、
//利用数组原型对象上的splice方法 function unique8(arr){ var i, j, len = arr.length; for(i = 0; i < len; i++){ for(j = i + 1; j < len; j++){ if(arr[i] == arr[j]){ arr.splice(j,1); len--; j--; } } } return arr; }
方法九、
扫描二维码关注公众号,回复:
1775583 查看本文章
function unique9(arr){ var bArr= []; for(var i=0; i<arr.length; i++){ bArr.lastIndexOf(arr[i]) !== -1 ? '' : bArr.push(arr[i]); } return bArr; }
方法十、
//利用ES6的set方法 //Set数据结构,它类似于数组,其成员的值都是唯一的 function unique10(arr){ // 利用Array.from将Set结构转换成数组 return Array.from(new Set(arr)); }
数组越长,方法三、四、五、六、七相对来说会更有优势。
2、对象去重
//将对象元素转换成字符串以作比较 function obj2key(obj, keys){ var n = keys.length, key = []; while(n--){ key.push(obj[keys[n]]); } return key.join('|'); } //去重操作 function uniqeByKeys(array,keys){ var arr = []; var hash = {}; for (var i = 0, j = array.length; i < j; i++) { var k = obj2key(array[i], keys); if (!(k in hash)) { hash[k] = true; arr .push(array[i]); } } return arr ; } obj=uniqeByKeys(obj,["examid"]);