javascript中的数组去重

1、方法一:双层循环,外层循环元素,内层循环做比较,若相同则跳过,不同则加入结果集中

Array.prototype.distinct = function(){
  var arr = this;
  var result = [];
  var len = arr.length;
  for(var i=0;i<len;i++){
    for(var j=i+1;j<len;j++){
      if(arr[i]===arr[j]){
        j = ++i;//出现相同的值,将j置为++i,即进入新一轮的循环
      }
    }
    result.push(arr[i])
  }
  return result;
}

 2、方法二:利用splice直接在原数组中删除

Array.prototype.distinct = function(){
    var arr = this,
    len = arr.length;
    for(var i=0;i<len;i++){
        for(var j = i+1; j<len;j++){
            if(arr[i]===arr[j]){
                arr.splice(i,1);
                len--;
                j--;
            }
        }
    }
    return arr;
}

 3、方法三:利用对象属性不能重复的特点去重

Array.prototype.distinct = function(){
    var arr = this;
    var len = arr.length;
    var obj = {}
    var result = []
    for(var i =0 ;i<len;i++){
        //if(!obj[arr[i]]){ 
        if(!obj.hasOwnProperty(arr[i])){
            obj[arr[i]] = 1;
            result.push(arr[i])
        }
    }
    return result
}

 4、方法四:利用数组进行排序

Array.prototype.distinct = function(){
    var arr = this;
    var len = arr.length;
    arr.sort(function(a,b){
        return a-b;
    })
    function loop(index){
        if(index>=1){
            if(arr[index] === arr[index-1]){
                arr.splice(index,1)
            }
            loop(index-1)
        }
    }
    loop(len-1)
    return arr;
}

 5、方法五:遍历数组,利用indexOf判断

Array.prototype.distinct = function(){
    var arr = this;
    var len = arr.length;
    var result = [];
    arr.forEach(function(currentVal,index,arr){  
    //arr.map(function(currentVal,index,arr){  
        var loop = result.indexOf(currentVal)
        if(loop === -1){
            result.push(currentVal)
        }
    })
    return result
}

6、方法六:es6的set数据结构,set成员都是唯一的,Array.form可以将set类型转化为数组

Array.prototype.distinct = function(){
    return Array.from(new Set(this)) //或者使用es6的三点运算符转化为数组 [...new Set(this)]
}

猜你喜欢

转载自www.cnblogs.com/lhyhappy65/p/9207945.html