javascript - 数组去重的函数把浏览器给整蒙了?怎么办
黄舟
黄舟 2017-04-10 17:13:49
[JavaScript讨论组]

数组去重,主要对数字型数组去重

function func(arr)
{if(arr.every(function(elem){return typeof elem=='number'}))
var arr1=arr.sort(function(a,b){return a-b;});//存储排序后的数组

for(var i=0,n=arr1.length;i<n;i++)    
    while(arr1[i]==arr1[i+1])
    {arr1.splice(i+1,1);
    arr.splice(arr.indexOf(arr1[i+1]),1);
    }
return arr;    
    }
alert(func([1, 1,2,2,3]));

//浏览器一直反应不过来??什么情况??请解释一下这个函数哪里有问题??

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
迷茫

这个写代码风格有待改进,大括号不对齐、缩进不规则读起来不费劲么?。。

几个需要改正的地方:

  1. indexOf方法要在arr上调用,像这样:arr.indexOf(num)

  2. 每次删除元素需要更新n的值

  3. 边界条件设置错误,应该是i + 1 < n而不是i < n

  4. sort默认会按升序排列,不用再加参数

  5. sort函数就地修改值,而且你的代码里arrarr1都指向了同一个内存地址,需要通过arr.slice(0)深度拷贝一下。

下面修改之后运行正常了。

function func(arr) {
    if(arr.every(function(elem){return typeof elem=='number'})) {
        var arr1 = arr.slice(0);
        arr1.sort();
        for(var i=0,n=arr1.length;i + 1<n;i++) {
            while(i + 1 < n && arr1[i] == arr1[i + 1]) {
                arr1.splice(i+1,1);
                --n;
                arr.splice(arr.indexOf(arr1[i]),1);
            }
        }
    }
    return arr;
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号