数组去重的5种方法有哪些?-PHP问题

资源魔 47 0

数组去重的5种办法有哪些?

数组去重的5种办法:

办法一:

两重for轮回去重

原理 两两比拟假如相等的话就删除了第二个

例如: 1 1 1 3 2 1 2 4

先让第一个1 即arr[0]与前面的一个个比拟 假如前面的值等于arr[0] 删除了前面的值

第一次完结后的后果是 1 3 2 2 4 删除了了前面一切的1

同理 第二次 第三会删除了与本人相反的元素

function noRepeat1(arr){
        // 第一层for用来管制轮回的次数
        for(var i=0; i<arr.length; i++){
            //第二层for 用于管制与第一层比拟的元素
            for(var j=i+1; j<arr.length; j++){
                //假如相等
                if(arr[i] == arr[j]){
                    //删除了前面的 即第 j个地位上的元素  删除了个数 1 个
                    arr.splice(j,1);
                    // j--很要害的一步  假如删除了 顺序就会犯错 
                    //j--的缘由是 每一次应用splice删除了元素时 前往的是一个新的数组 
                    // 这象征这数组下次遍历是 比拟市跳过了一个元素
                    /*
                        例如: 第一次删除了后 前往的是 1 1 3 2 1 2 4
                     *  然而第二次遍历是 j的值为2  arr[2] = 3
                     *  相称于跳过一个元素 因而要 j--
                     * */
                    j--;
 
                }
 
            }
        }
 
        return arr;
    }

办法二:

单层for轮回

原理以及办法一类似

function norepeat(arr){
                arr.sort();
                //先排序让大略相反的正在一个地位,这里为何说是大略相反 是由于sort排序是把元素当字符串排序的 它以及可能排成 1 1 10 11 2 20 3 ... 没有是咱们想要的从小到年夜
                for(var i = 0; i < arr.length-1;i++){
        //仍是两两比拟 同样删除了前面的
                    if(arr[i]==arr[i+1]){
                        arr.splice(i,1);
                        //i-- 以及j--同理
                        i--;
                    }
                }
                return arr;
             }

办法三:

原理:用一个空数组去存初次呈现的元素
行使 indexOf 属性 indexOf是前往某个指定的字符正在字符串中呈现的地位,假如不就会前往-1
因而咱们能够很好的行使这个属性 当前往的是 -1时 就让其存入数组

function noRepeat2(arr){
        var newArr = [];
        for(var i = 0; i < arr.length; i++){
            if(newArr.indexOf(arr[i]) == -1){
                        newArr.push(arr[i]);
                }
        }
        return newArr;
        }

办法四:

原理:行使工具的思维,假如工具里不这个属性的话就会前往undefined
行使这个原理应前往的是undefined时让其放入数组而后正在给这个属性赋值

function norepeat3(arr) {
        var obj = {};
        var newArr = [];
        for(var i = 0; i < arr.length; i++) {
            if(obj[arr[i]] == undefined) {
                newArr.push(arr[i]);
                obj[arr[i]] = 1;
            }
        }
        return newArr;
     }

办法五:

原理:轮回比拟假如相等的让前面的元素值为0,最初正在输入的时分删除了为0的这个条件是你的数据里不克不及有0,然而凡事能够变通你能够设置任何值代替这个0,这个办法是我过后想到完成的以是不进行很好的优化。

var newArr = [];
    //管制外轮回
    for(var i=0; i<arr.length-1;i++){
        //内存轮回 只比拟前面的
        for(j=i+1;j<arr.length;j++){
            //假如相等就让其值等于0
            if(arr[i]==arr[j]){
                arr[j]=0;
            }
        }
        //去除了值为0的
        if(arr[i]==0){
            continue;
        }else{
            //放入新的数组
            newArr.push(arr[i]);
        }
}

保举教程:《PHP视频教程》

以上就是数组去重的5种办法有哪些?的具体内容,更多请存眷资源魔其它相干文章!

标签: php教程 php故障解决 php使用问题 数组去重

抱歉,评论功能暂时关闭!