Lorsque vous effectuez des opérations de tableau, vous rencontrez souvent le problème de la suppression des doublons. Ce qui suit est une brève introduction à la méthode de déduplication des tableaux.
index de déduplication
Array.prototype.Unique1 = function () {var arr = []; for (var i = 0; i <this.length; i ++) {var item = this [i]; if (arr.indexof (item) === -1) {arr.push (item);}} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .Unique1 (); // [1, 2, 3, "4", 4, "34"]Cependant, sous IE6-8, la méthode d'indexation du tableau n'existe pas encore (bien qu'il s'agisse d'un peu l'ancien sujet o (∩_∩) o ~), mais les programmeurs doivent écrire une méthode d'index:
var indexof = [] .Indexof? function (arr, item) {return arr.indexof (item);}: function indexof (arr, item) {for (var i = 0; i <arr.length; i ++) {if (arr [i] === item) {return i;}} return -1;} array.prototype.UNIQUE2 = fonction () {var arr = []; pour (var i = 0; i. {var item = this [i]; if (arr.indexof (item) === -1) {arr.push (item);}} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .Unique2 (); // [1, 2, 3, "4", 4, "34"]L'indexof peut également utiliser ce moyen de réconstruction:
Array.prototype.Unique3 = function () {var arr = [this [0]]; for (var i = 1; i <this.length; i ++) {if (this.indexof (this [i]) == i) {arr.push (this [i]);}} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .Unique3 (); // [1, 2, 3, "4", 4, "34"]Hachage pour recharger
L'indice ci-dessus est correct, mais en termes de performances, le double cycle réduira les performances. Ensuite, nous utilisons le hash.
Array.prototype.Unique4 = function () {var arr = []; var hash = {}; for (var i = 0; i <this.length; i ++) {var item = this [i]; var key = typeof (item) + itelif (hash [key]! == 1) {arr.push (item); hash [key] = 1;}} return) arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .Unique4 (); // [1, 2, 3, "4", 4, "34"]Le noyau consiste à construire un objet de hachage pour remplacer l'index. Changer d'espace en temps. Notez que dans JavaScript, la valeur clé d'un objet ne peut être qu'une chaîne (bien sûr, ES6 fournit une structure de données de carte. Il est similaire à un objet et est également une collection de paires de valeurs clés, mais la portée de la "clé" n'est pas limitée à des chaînes. Tous les types de valeurs (y compris les objets) peuvent être considérés comme des clés. qui est une représentation de structure de hachage plus complète.), donc var key = typeof (item) + item est nécessaire pour distinguer la valeur 1 et la chaîne «1».
Alors si vous voulez que «4» et 4 soient considérés comme les mêmes (les autres approches sont les mêmes)
Array.prototype.Unique5 = fonction () {var arrR = []; var hash = {}; for (var i = 0, len = this.length; i <len; i ++) {if (! Hash [this [i]]) {arr.push (this [i]); hash [this [i]] = true;}} return; arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .Unique5 (); // [1, 2, 3, "4", "34"]Après le tri, se débrouiller
Array.prototype.Unique6 = function () {this.sort (); var arr = [this [0]]; for (var i = 1; i <this.length; i ++) {if (this [i]! == arr [arr.length-1]) {arr.push (this [i]);}} return-1]) {arr.push (this [i]);}} return arr;} [1,2,3, '4', 3,4,3,1, '34 ', 2] .Unique6 (); // [1, 2, 3, "34", "4", 4]Triez d'abord le tableau, puis comparez deux valeurs adjacentes. Lors du tri, utilisez la méthode de tri native JS, il est donc très rapide. Il n'y a qu'un seul inconvénient à cette méthode. Lors de la comparaison des caractères, ils sont triés dans l'ordre du codage des personnages. Vous verrez donc que 10 est classé premier en 2. Cependant, cela n'affectera pas l'élimination du poids lourd. Cependant, pour résoudre le problème de type, la méthode de tri accepte un paramètre, qui est une méthode:
fonction compare (value1, value2) {if (value1 <value2) {return -1;} else if (value1> value2) {return 1;} else {return 0;}} [1,2,5,2,10,3,20] .sort (compare); // [1, 2, 2, 3, 5, 10, 20]Réglé pour recharger
ES6 fournit un nouvel ensemble de structures de données. Il est similaire à un tableau, mais les valeurs des membres sont toutes uniques, sans valeurs en double. Le navigateur est désormais entièrement pris en charge et le nœud serveur est également pris en charge.
Array.prototype.Unique7 = function () {return array.from (nouveau set (this));} [1,2,3, '4', 3,4,3,1, '34 ', 2] .Unique7 (); // [1, 2, 3, "4", 4, "34"]Bibliothèque méthode
Recommandé une bibliothèque de méthode sous-cite.js, qui est très populaire dans le nœud ou le navigateur JS.
const _ = require ('calendrier'); _. Uniq ([1, 2, 1, 3, 1, 4]); // [1, 2, 3, 4]Temps de test
Toutes les méthodes ci-dessus peuvent être testées de manière simple, puis comparer et sélectionner les meilleures méthodes:
Console.Time ("test"); [1,2,3, '4', 3,4,3,1, '34 ', 2] .Unique7 (); console.Timeend ("test"); ==> VM314: 3 Test: 0,378 msPour agrandir les données, créez 1 million de nombres au hasard:
var arr = []; var num = 0; for (var i = 0; i <1000000; i ++) {num = math.floor (math.random () * 100); arr.push (num);} console.time ("test"); arr.Unique7 (); console.Timeend ("test");Ce qui précède est la déduplication du tableau JavaScript que l'éditeur vous a présenté du lent à rapide de moyen à simple. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!