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;
}

方法九、

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM