【JS】数组去重

发布于:2023-01-02 ⋅ 阅读:(176) ⋅ 点赞:(0)

【JS】数组去重

  • 有一个数组 arr = [‘a’, ‘c’, ‘b’, ‘c’, ‘e’, ‘d’, ‘a’, ‘f’, ‘e’, ‘g’, ‘b’, ‘a’, ‘g’] 要求去除掉数组中重复的元素!

案例分析:

  1. 目标:把旧数组里面不重复的元素选出来放到新数组中,重复的元素只保留一个,放到新数组中去重;
  2. 核心:遍历数组,然后拿着旧数组去查询新数组,如果该元素在新数组中没有出现过,就添加进去,否则不要添加;
  3. 如何知道该元素是否存在?利用新数组.indexOf(数组元素),如果返回 -1 说明新数组中没有该元素;

普通版:

    <!-- 要求去掉数组中重复的元素 -->
    <script>
        var arr = ['a', 'c', 'b', 'c', 'e', 'd', 'a', 'f', 'e', 'g', 'b', 'a', 'g'],
            num = [];
        var max, temp, newArr = [];

        // 去重函数
        for (var i = 0; i < arr.length - 1; i++) {
            // 核心:indexOf()
            if (newArr.indexOf(arr[i]) == -1) {
                newArr[newArr.length] = arr[i];
            } else {
                num[num.length] = i;
            }
        }
        console.log('被去掉数组元素的索引号:');
        console.log(num);
        console.log('去重后的新数组:');
        console.log(newArr);
        // 去重后,进行排序(根据的是ASCII码值)
        for (i = 0; i < newArr.length - 1; i++) {
            for (var j = 0; j < newArr.length - 1; j++) {
                if (newArr[j] > newArr[j + 1]) {
                    temp = newArr[j];
                    newArr[j] = newArr[j + 1];
                    newArr[j + 1] = temp;
                }
            }
        }
        console.log('去重/排序后的数组:');
        console.log(newArr);
    </script>

运行结果:
在这里插入图片描述

升级版:

  <!-- 升级版 -->
  <script>
        var arr1 = ['a', 'c', 'b', 'c', 'e', 'd', 'a', 'f', 'e', 'g', 'b', 'a', 'g'],
            num = [];

        var number = [7, 4, 1, 1, 4, 7, 2, 5, 6, 3, 2, 5, 28, 19, 6, 4, 3],
            obj = {};

        // 封装一个去重函数
        function unique(arr) {
            var newArr = [];
            // 判断传入值是否为数组
            if (checkArray(arr)) {
                // 去重
                for (var i = 0; i < arr.length - 1; i++) {
                    if (newArr.indexOf(arr[i]) === -1) {
                        // newArr.push(arr[i]);也可以push()简单
                        newArr[newArr.length] = arr[i];
                    } else {
                        // 存放重复元素的索引号
                        num[num.length] = i;
                    }
                }
                // 排序
                return newSort(newArr);

            } else {
                return "error:传入的这个参数要求必须是数组形式 [参数1,参数2,···]";
            }

        }

        // 封装一个检测函数:判断传入值是否为数组
        function checkArray(arr) {
            var flag = false;
            if (Array.isArray(arr)) {
                return true;
            }
        }

        // 封装一个排序函数:将去重后的数组按照从小到大排序
        function newSort(arr3) {
            for (var i = 0; i < arr3.length - 1; i++) {
                for (var j = 0; j < arr3.length - 1; j++) {
                    if (arr3[j] > arr3[j + 1]) {
                        var t = arr3[j];
                        arr3[j] = arr3[j + 1];
                        arr3[j + 1] = t;
                    }
                }
            }
            return arr3;
        }

        // 输出已经去重并且排好序的数组
        console.log('去重并且排好序的新数组:');
        console.log(unique(arr1));
        console.log(unique(number));

        console.log('重复的数组元素的索引号:');
        console.log(num);

        console.log('检测不是数组的元素:');
        console.log(unique(obj));
    </script>

运行结果:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到