Skip to content

seek and destroy

LYF edited this page Jul 11, 2016 · 3 revisions

金克斯的迫击炮

题目链接:https://freecodecamp.cn/challenges/seek-and-destroy

这道题目有点难度,也非常有意思,也有多种实现方式。

1、双重for循环,仅依靠javascript ES3版本就能实现。

function destroyer(arr) { 
   for(var i=0; i<arr.length; i++){ 
     var bool = false; 
     for(var j = 1; j < arguments.length; j++){ 
       if(arr[i] === arguments[j]){ 
         arr.splice(i,1); bool = true; 
         break;
       } 
    } 
    if(bool){ 
      i = i-1; 
    }
  } 
  return arr;
} 
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

2、用javascript ES5版本中的Array.filter() + for循环也能实现

function destroyer(arr) {
  var argument = arguments;
  var result = arr.filter(function(ele,index){
    var bool = true;
    for(var i = 1; i < argument.length; i++){
      if(ele === argument[i]){
        bool = false;
        break;
      }
    }
    return bool;
  });
  return result;
} 
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

3、用javascript ES5版本中的Array.filter() + ES5中的indexOf + ES6中的Rest parameters + ES6中的Arrow Function

function destroyer(arr,...restArgs) {
  return arr.filter(ele => {
      return restArgs.indexOf(ele) === -1
  });
} 

4、用javascript ES6版本中的Array.from() + ES7版本中的Array.includes()

function destroyer(arr) {
  var args = Array.from(arguments); //把实参arguments转化为数组args
  args.shift(); //通过数组的shift()方法去掉第一个元素[1,2,3,1,2,3],获得剩余的数组[2,3]
  return arr.filter(function(x) { //通过数组的filter()方法来迭代数组所有的元素,x代表每次迭代的元素
    return !args.includes(x); //通过数组的includes()方法来判断数组[2,3]中是否包含x元素,用!取反的意思是只留下未找到的元素。
  });
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
Clone this wiki locally