javascript - 这个代码我想遍历两次,但第一次运行遇到 return就结束了,怎么办?
迷茫
迷茫 2017-04-11 12:35:33
[JavaScript讨论组]

代码如下:

function destroyer(arr) {
  // Remove all the values
  var brr=arguments[0].filter(function(x){
    for(var j=1;j

应该怎么改?我想跳出那个循环,待遍历后再输出结果,正确结果应该是显示 [1,1]

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
巴扎黑

你这代码写的比较奇怪……我重新写了个,你参考下。

function destroyer(arr) {
    var del = Array.prototype.slice.call(arguments,1);

    return arr.filter(function(item) {
        return(del.indexOf(item) < 0);
    });
}
黄舟

你的逻辑没看懂,不过按你的逻辑,大概你想要的是下面这个结果(truefalse 以及中断条件有可能与你本意相反,你自己酌情处理)

    var brr = arguments[0].filter(function(x) {
        for (var j = 1; j < arr.length; j++) {
            if (x != arr[j]) {
                return false;
            }
        }
        return true;
    });
天蓬老师
function destroyer (arr) {
     let items = [].slice.call(arguments, 1)
     return arr.filter(x => items.indexOf(x) < 0)
}

你的逻辑怪怪的,没看懂

高洛峰

filter理解错误,filter的参数函数接受一个返回值,里面循环第一次返回当然就结束了,filter只是根据当前参数item来返回一个值的功能。

还有arguments都已经是不推荐使用的东西了。
如果要做一个从数组里删掉特定项的函数,有无数种方法实现,非要这么复杂和不可读吗?

天蓬老师

题主的逻辑是不是“过滤掉第一个数组参数中和后面参数相等的元素”

如果不是,请忽略答案
如果是的话,也就是“过滤掉[1,2,3,1,2,3]中的[2,3]”,
那么分析题主的代码的过滤函数如下:
1-> 1!=2 return true 还应判断1!=3
2-> 2!=2 return false 过滤掉
3-> 3!=2 return true 还应判断1!=3
……
可以发现逻辑是有问题的,都只是和2进行了比较,实际上1、3还需要和3比较才能确定。
应该改为:

for(var j=1;j<arguments.length;j++){
    if(x==arguments[j]){
        return false;
    }
}
return true;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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