Maison > interface Web > js tutoriel > 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

巴扎黑
Libérer: 2017-07-18 18:24:07
original
1593 Les gens l'ont consulté

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]
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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]
Copier après la connexion

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]
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal