FCC--Seek and Destroy(摧毁数组)

算法描述:实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。

例子: destroyer([1, 2, 3, 1, 2, 3], 2, 3) 应该返回 [1, 1].

算法思路:1,将数组中的数字和后面的参数进行一一匹配,不相等则返回,相等则不返回。

实现方法:算法类似过滤因此可以使用filter函数,将数组中的数字过滤。

使用arguments来进行参数的遍历。

function destroyer(arr) {
  // Remove all the values
  var arr_arg = arguments;
  for(var i = 1; i < arr_arg.length; i++){
    arr = arr.filter(function(val){
      return arr_arg[i] !== val;   
    });
    }
  return arr;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
用for循环将数组中的数字与参数进行匹配,除了第一个参数(为数组)。

以上是最基础的一种解法,一行就可以搞定。

利用reduce中的遍历省掉了for循环,具体方法如下。

function destroyer(arr) {
  // Remove all the values
return [].slice.call(arguments).reduce(function (prev, next) {
        return prev.filter( e => e !== next);
    });
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

[ ].slice.call(arguments)的意思和arguments.slice()的方法一样,但是arguments没有这种方法,所以用call方法调用。

reduce()方法以pre为基准对后面的next进行遍历,利用filter进行过滤。

(e => e  !== next)为ES6方法同ES5方法:(fucntion(e){return e !== next})

需要熟练掌握call方法和reduce的遍历方法。



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值