一维数组和二维数组和对象格式数据的去重

首先是一维数组去重

Array.prototype.distinct = function(){
    var arr = this,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;
}
var arr = [1,2,3,4,4,1,1,2,1,1,1];
arr.distinct();       //返回[3,4,2,1]

思路很简单,两层循环,外层循环元素,内层循环时比较值

如果有相同的值则跳过,不相同则push进数组

接下来是二维数组去重

var arr = [["aa","bb","cc"],["aa","bb","cc"],["b","b","v"]];  
var hash = {};  
var result = [];  
for(var i = 0; i < arr.length; i++){  
    if(!hash[arr[i]]){  
        result.push(arr[i]);  
        hash[arr[i]] = true;  
    }  
}  
console.log(result);  

这个数组的数据类型很有特点,是完全一模一样的,所以判断的时候只需要检测hash对象是否含有对应的值(整条arr[i])就可以了,如果不含有对应的值,说明数据没有重复,则将不重复的数据追加到result数组中,并且标记hash对象有哪些数据是不重复的。

特定的二维数组,根据特定的元素判断重复与否,比较符合日常开发需求

function tidy(arr) {
                    var cache = {},result = [];
                    var key; 
                    for (var i = 0; i < arr.length; i++) {
                        key = arr[i][0];
                        if (!cache[key]) {
                            cache[key] = 1;
                            result.push(arr[i]);
                        }
                    }
                    console.log(result);
                    console.log(cache);
                };
                var arr = [['a',1,1,5,5], ['b',2,1,9,5], ['a',2,3,4,8],['b',1,9,8,3]];
                tidy(arr); 

和上面其实是差不多的,就是加了选定元素的下标,就可以了。

对象格式的数据去重

var arr = [{'name':'wly',age:22},{'name':'wz',age:25},{'name':'wly',age:22}];
var result = []
for(var i = 0; i < arr.length; i++){
   var name1 = arr[i]['name'];
   var age1 = arr[i]['age']; 
   //j的初始值永远比i多1,因为要从i往后的第一个值开始比,
   //i本身那个位置的值不用比(1231要从2开始和23比)
   for(var j = i + 1; j < arr.length; j++){
      var name2 = arr[j]['name'];
      var age2 = arr[j]['age'];  
      if(name1 != name2 || age1 != age2){
          result.push(arr[i]);
      }   
   }
}
console.log(result);

其实思路和上面是一样的


猜你喜欢

转载自blog.csdn.net/wly_syp/article/details/79174787