Maison  >  Article  >  interface Web  >  Supprimer les données en double du tableau JS

Supprimer les données en double du tableau JS

小云云
小云云original
2018-03-13 16:08:191593parcourir

En JS, nous rencontrons souvent le besoin de supprimer les données en double des tableaux. Nous introduisons ici quatre algorithmes pour réaliser la fonction de déduplication des tableaux JS. J'espère que cela pourra aider tout le monde.

1. L'algorithme le plus rapide : méthode d'appariement clé-valeur d'objet

Idée d'implémentation : créez un nouvel objet js et un nouveau tableau, et lors de la traversée du tableau entrant, déterminez si le la valeur est une clé d'objet js, sinon, ajoutez la clé à l'objet et placez-la dans un nouveau tableau.

//注意点: 判断 是否为js对象键时,会自动对传入的键执行“toString()”,不同的键可能会被误认为一样;例如: a[1]、a["1"] 。解决上述问题还是得调用“indexOf”。
        //速度最快, 占空间最多(空间换时间)
        function unique(array){
            var n = {}, r = [], len = array.length, val, type;
            for (var i = 0; i < array.length; i++) {                val = array[i];                type = typeof val;                if (!n[val]) {
                    n[val] = [type];
                    r.push(val);
                } else if (n[val].indexOf(type) < 0) {
                    n[val].push(type);
                    r.push(val);
                }
            }            return r;
        }

2. L'algorithme le plus ingénieux : méthode de traversée de tableau optimisée

Idée d'implémentation : obtenez la valeur la plus à droite sans répétition et placez-la dans un nouveau tableau. (Lorsque des valeurs en double sont détectées, la boucle actuelle est terminée et le prochain tour de jugement de la boucle de niveau supérieur est entré)

function unique1(array){
            var r = [];            for(var i = 0, l = array.length; i<l; i++){                for(var j = i + 1; j < l; j++)                    if(array[i] == array[j]) j == ++i;
                r.push(array[i]);
            }            return r;
        }

Algorithme : méthode de suppression adjacente après le tri

.

Idée d'implémentation : Passer Triez le tableau de manière à ce que les mêmes valeurs soient adjacentes après le tri, puis lors du parcours, ajoutez uniquement les valeurs qui ne sont pas des doublons de la valeur précédente au nouveau tableau.

//将相同的值相邻,然后遍历去除重复值
        function unique2(array){
            array.sort();            var re=[array[0]];            for(var i = 1; i < array.length; i++){                if( array[i] !== re[re.length-1])
                {
                    re.push(array[i]);
                }
            }            return re;
        }

4. Algorithme : méthode de jugement d'indice de tableau

Idée d'implémentation : si le i-ème élément du tableau actuel apparaît d'abord dans une position autre que i dans le tableau actuel, alors cela signifie que le i-ième élément apparaît en premier dans le tableau actuel. L'élément i est répété et ignoré. Sinon, le tableau des résultats

function unique3(array){
            var n = [array[0]]; //结果数组
            //从第二项开始遍历
            for(var i = 1; i < array.length; i++) {                //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
                //那么表示第i项是重复的,忽略掉。否则存入结果数组
                if (array.indexOf(array[i]) == i) n.push(array[i]);
            }            return n;
        }

En JS, vous rencontrez souvent le besoin de supprimer les données répétées dans le tableau. Ici, les quatre algorithmes sont présentés pour réaliser. la fonction du tableau JS.

1. L'algorithme le plus rapide : méthode d'appariement clé-valeur d'objet

Idée d'implémentation : créer un nouvel objet js et un nouveau tableau, et lors de la traversée du tableau entrant. , déterminez si la valeur est la clé de l'objet js. Sinon, ajoutez la clé à l'objet et placez-la dans un nouveau tableau.

//注意点: 判断 是否为js对象键时,会自动对传入的键执行“toString()”,不同的键可能会被误认为一样;例如: a[1]、a["1"] 。解决上述问题还是得调用“indexOf”。
        //速度最快, 占空间最多(空间换时间)
        function unique(array){
            var n = {}, r = [], len = array.length, val, type;
            for (var i = 0; i < array.length; i++) {                val = array[i];                type = typeof val;                if (!n[val]) {
                    n[val] = [type];
                    r.push(val);
                } else if (n[val].indexOf(type) < 0) {
                    n[val].push(type);
                    r.push(val);
                }
            }            return r;
        }
2. L'algorithme le plus ingénieux : méthode de traversée de tableau optimisée

Idée d'implémentation : obtenez la valeur la plus à droite sans répétition et placez-la dans un nouveau tableau. (Lorsque des valeurs en double sont détectées, la boucle actuelle est terminée et le prochain tour de jugement de la boucle de niveau supérieur est entré)

function unique1(array){
            var r = [];            for(var i = 0, l = array.length; i<l; i++){                for(var j = i + 1; j < l; j++)                    if(array[i] == array[j]) j == ++i;
                r.push(array[i]);
            }            return r;
        }
Algorithme : méthode de suppression adjacente après le tri

.

Idée d'implémentation : Pass Triez le tableau de manière à ce que les mêmes valeurs soient adjacentes après le tri, puis lors du parcours, ajoutez uniquement les valeurs qui ne sont pas des doublons de la valeur précédente au nouveau tableau.

//将相同的值相邻,然后遍历去除重复值
        function unique2(array){
            array.sort();            var re=[array[0]];            for(var i = 1; i < array.length; i++){                if( array[i] !== re[re.length-1])
                {
                    re.push(array[i]);
                }
            }            return re;
        }
4. Algorithme : méthode de jugement d'indice de tableau

Idée d'implémentation : si le i-ème élément du tableau actuel apparaît d'abord dans une position autre que i dans le tableau actuel, alors cela signifie que le i-ième élément apparaît en premier dans le tableau actuel. L'élément i est répété et ignoré. Sinon, stockez le tableau de résultats

function unique3(array){
            var n = [array[0]]; //结果数组
            //从第二项开始遍历
            for(var i = 1; i < array.length; i++) {                //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
                //那么表示第i项是重复的,忽略掉。否则存入结果数组
                if (array.indexOf(array[i]) == i) n.push(array[i]);
            }            return n;
        }
Recommandations associées :

Suppression des données php mysql au niveau d'un million des données en double

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