数组的去重

  // 1,排序后,删除重复单元
        // 数组去重,之后是保留1,2,3,4,5内容
        var arr = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];
        // 先给数组中的数据进行排序 从大到小,从小到大无所谓
        arr.sort(function(a,b){return a-b});
        // 数组去重思路
        // 数值已经是按照顺序排列的
        // 当前位置上的数据,与相邻的下一个位置上的数据,进行比较
        // 如果相同,就删除下一个单元
 
        // 必须要通过for循环,生成所有的索引下标
        // 因为之后要通过操作索引下标的数值,来控制循环
        for(var i = 0 ; i <= arr.length-1 -1 ; i++){
            // 当前单元是 i 的数值 所表示的索引下标对应的单元 arr[i]
            // 下一个单元是 i+1 的数值 所表示的索引下标对应的单元 arr[i+1]
            // 判断这两个单元存储的数值,是否相同
            // 一定要使用全等判断,确保判断数据类型
            if(arr[i] === arr[i+1]){
                // 如果 当前单元arr[i] 和 下一个单元 arr[i+1]
                // 数据类型和数值都相同,就执行删除操作
                // 删除 i+1 这个单元
                // 从索引是 i+1 开始 删除 1个单元
                arr.splice(i+1 , 1);
                // 为了防止数组的坍塌
                i--;
            }
        }
 
 // 通过双层for循环来实现
        // 原理是从第一个数值开始,与之后所有的数值数据,数据,一一进行比较
        // 如果相同,就删除之后的数据,并且要执行 i-- 防止数组坍塌的影响
        // 不用先进行数组的排序了

        var arr = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];

        // 外层是从第一个到 倒数第二个 所有的索引下标
        for(var i = 0 ; i <= arr.length-1-1 ; i++){ 
            // 内层 是从 外层位置的 下一个位置开始 到 最后一个索引下标
            for(var j = i+1 ; j <= arr.length-1 ; j++){
                // 如果两个数据相同 arr[i]  arr[j]
                if(arr[i] === arr[j]){
                    // 删除后面的单元 也就是 从j 开始删除一个单元
                    arr.splice(j,1);
                    // 执行 j-- 防止数组坍塌的响应
                    j--;
                }
            }
        }


        // 总结
        // 只要删除数组的单元,就一定会发生数组的坍塌
        // 一定要执行 i-- 操作
        // 让索引下标,重新回到引起数组删除,发生数组坍塌的单元
        // 重新对坍塌之后,前移补充上来的单元,存储的数据进行比较操作
        // 循环到最后一个单元,没有下一个单元与他进行比较
        // 只要循环到,倒数第二个单元就可以了
 
 // 使用 indexOf 方法
        // 创建一个新的独立的数组
        // 将原始数组中的数据,往新数组中写入 push() 或者 unshift()
        // 添加判断条件,当新数组中没有当前数值时,再往新数组中写入数据
        // 这样就不会有重复的数据被写入

        var arr = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5];

        // 新建一个数组
        var newArr = [];

        // 循环遍历 arr 中的所有数据单元
        // 这次不需要使用删除数组单元的操作,for...in forEach都可以使用了

        for(var i = 0 ; i <= arr.length-1 ; i++ ){
            // 在新数组中使用indexOf() 查询当前 arr的索引下标表示的数值数据
            // 如果 当前索引存储的数值数据,arr[i] 不在新数组中,返回值是 -1
            // 数值不在新数组中,可以执行写入操作,将当前数值arr[i] 写入到新数组中
            if( newArr.indexOf(arr[i]) === -1 ){
                // 向新数组中,写入当前单元的数据
                newArr.push(arr[i]);
            }
        }

        console.log(newArr);

        // for...in循环
        // 通过自定义变量,存储生成索引下标
        // for(var i in arr){
        //     if(newArr.indexOf(arr[i]) === -1){
        //         newArr.push(arr[i]);
        //     }
        // }

        // forEach循环

        // arr.forEach(function(val){
        //     if(newArr.indexOf(val) === -1){
        //         newArr.push(val);
        //     }
        // })
右侧打赏一下 代码改变世界一块二块也是爱
原文地址:https://www.cnblogs.com/ht955/p/14033722.html