Maison  >  Article  >  interface Web  >  Résumé de plusieurs méthodes pour réaliser la déduplication de tableau en js

Résumé de plusieurs méthodes pour réaliser la déduplication de tableau en js

巴扎黑
巴扎黑original
2017-07-18 18:24:071560parcourir

Méthode 1 :

  1. Boucle double couche, élément de boucle externe, comparer la valeur lors de la boucle interne

  2. S'il y a la même valeur S'ils ne sont pas identiques, poussez-les dans le tableau

Array.prototype.distinct = function(){var arr = this,
        result = [],
        i,
        j,
        len = arr.length;for(i = 0; i < len; i++){for(j = i + 1; j < len; j++){if(arr[i] === arr[j]){
                j = ++i;
            }
        }
        result.push(arr[i]);
    }return result;
}var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();             //返回[3,4,2,1]

Méthode 2 : utilisez l'épissure pour opérer directement sur le tableau d'origine

  1. Boucle double couche, élément de boucle externe, valeur de comparaison de boucle interne

  2. Si les valeurs sont les mêmes, supprimez cette valeur

注意点 : Après avoir supprimé des éléments, la longueur du tableau doit être réduite de 1.

Array.prototype.distinct = function (){var arr = this,
        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;
};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

Avantages : Simple et facile à comprendre
Inconvénients : Utilisation élevée de la mémoire et vitesse lente

Méthode 3 : Utiliser les propriétés des objets qui ne peuvent pas être identiques pour supprimer les doublons

Array.prototype.distinct = function (){var arr = this,
        i,
        obj = {},
        result = [],
        len = arr.length;for(i = 0; i< arr.length; i++){if(!obj[arr[i]]){    //如果能查找到,证明数组元素重复了obj[arr[i]] = 1;
            result.push(arr[i]);
        }
    }return result;
};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

Méthode 4 : Déduplication récursive en tableau

  1. Utiliser la pensée récursive

  2. Trier d'abord, puis comparer à partir de la fin, s'ils sont identiques, supprimez

Array.prototype.distinct = function (){var arr = this,
        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函数进行去重        }
    }
    loop(len-1);return arr;
};var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,56,45,56];var b = a.distinct();
console.log(b.toString());        //1,2,3,4,5,6,45,56

Méthode 5 : utilisez indexOf et forEach

Array.prototype.distinct = function (){var arr = this,
        result = [],
        len = arr.length;

    arr.forEach(function(v, i ,arr){        //这里利用map,filter方法也可以实现var bool =  arr.indexOf(v,i+1);        //从传入参数的下一个索引值开始寻找是否存在重复if(bool === -1){
            result.push(v);
        }
    })return result;
};var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];var b = a.distinct();
console.log(b.toString());    //1,23,2,3

Méthode 6 : utilisez l'ensemble ES6

Définissez la structure des données, elle est similaire à un tableau et les valeurs de ses membres sont uniques.

Utilisez Array.from pour convertir la structure Set en tableau

function dedupe(array){return Array.from(new Set(array));
}

dedupe([1,1,2,3]) //[1,2,3]

L'opérateur d'expansion (...) est utilisé en interne pour...de boucle

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)];   
console.log(resultarr);  //[1,2,3]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn