JS实现找出数组中重复的数字的三种方法

分享在JS中实现——找出数组中重复数字的方法的三种

法一、 排序比较法

先排序,再通过遍历比较,若相等,则添加到结果数组中,最后对结果数组进行去重,即可得到结果。

function getSameNum(Arr) {
    
    
            let result = [];//用于保存最后的结果
            //排序
            let arr = Arr.sort(function (a, b) {
    
    
                return a - b;//increse
            });
            //由于每次遍历访问Arr.length都是需要重复执行的,因此保存到len,提高效率
            let len = Arr.length;
            //遍历比较,看是否有相同的数字
            for (let i = 0; i < len - 1; i++) {
    
    
                if (Arr[i] === Arr[i + 1]) {
    
    
                    result.push(Arr[i]);
                }
            }
            //去重,防止有三个相同的时,会多push一个相同数字
            return Array.from(new Set(result));

        }

法二、集合唯一性法

利用Set中元素的唯一性,逐个将数组中的元素添加到set中,若size没发生改变,则说明数组的此元素为重复元素,再对结果数组去重,即可得到结果。

function useSet(Arr) {
    
    
            let set = new Set();
            let result = [];
            let len = Arr.length;
            for (let i = 0; i < len; i++) {
    
    
                let setLen = set.size;
                set.add(Arr[i]);
                //若集合调用add方法后,集合的size没有变化,则说明该元素为重复的数字
                if (setLen == set.size) {
    
    
                    result.push(Arr[i]);
                }
            }
            return Array.from(new Set(result));
        }

        console.log(useSet(root));

法三、indexOf查找

遍历每一个数组元素,通过indexOf(curNum,startPos)的方式进行查找,若查询结果不为-1,则说明该数组元素重复。

function useIndexOf(Arr) {
    
    
            let len = Arr.length;
            let result = [];
            for (let i = 0; i < len; i++) {
    
    
                let curNum = Arr[i];
                //遍历到Arr[i]时,若在这个索引i之后都没找到相同数字,则indexOf会返回-1,说明改数字不存在重复
                if (Arr.indexOf(curNum, i+1) != -1) {
    
    
                    result.push(curNum);
                }
            }
            return Array.from(new Set(result));
        }

        console.log(useIndexOf(root));

测试用例:

var root = [1, 2, 4, 6, 6, 6, 2, 3];

测试结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45664402/article/details/114336429
今日推荐