这个代码我想遍历两次,但第一次运行遇到 return就结束了,怎么办?

代码如下:

function destroyer(arr) {
  // Remove all the values
  var brr=arguments[0].filter(function(x){
    for(var j=1;j<arr.length;j++){
       return x!=arr[j]; //到这里就直接返回结果了,但我需要它遍历完后再输出结果
    }
  });
  return brr;
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3);

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

阅读 3.5k
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都已经是不推荐使用的东西了。
如果要做一个从数组里删掉特定项的函数,有无数种方法实现,非要这么复杂和不可读吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题