JS数组、对象去重汇总

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"]);

猜你喜欢

转载自www.cnblogs.com/biubiuAngelia/p/9237786.html
今日推荐