无法使用此函数根据javaScript中的后续参数删除特定元素

时间:2016-04-07 23:19:44

标签: javascript arrays

我有一个初始数组(驱逐舰函数中的第一个参数),后跟一个或多个参数。我基本上想要使用后续的参数来确定最终将什么拼接出我的数组。

function destroyer(arr) {
  var temp = [], j = 0;
  for(var i= 1; i < arguments.length; i++){
     temp.push(arguments[i]);
   }

  while(j < arr.length){

    if(temp[j] === arr[j]){

      arr.splice(j, 1);

    }
     j++;
  }


  return arr;
}

更新 如果我的描述模糊不清,我忘了包括如何执行它。

destroyer([1, 2, 3, 1, 2, 3], 2, 3) //should return [1, 1]

我刚回到原来的阵列?!

3 个答案:

答案 0 :(得分:1)

Freecodecamp 挑战吗?这对我来说似乎很熟悉。

这是我解决问题的方法。

function destroyer(arr) {
  var temp = [], j = 0;
  for(var i= 1; i < arguments.length; i++){
     temp.push(arguments[i]);
   }
  var resAr=[];
  while(j < arr.length){
    if(temp.indexOf(arr[j])===-1){
      resAr.push(arr[j])
    }
    j++;
  }
  return resAr;
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));

答案 1 :(得分:0)

这应该有用但是它的大O(n ^ 2)因为它需要搜索将被删除的元素

function destroyer(arr) {
    var temp = Array.prototype.slice.call(arguments);
    for (var i=1;i<temp.length;i++) {
        for (var j=0;j<arr.length;j++) {
            if (temp[i] === arr[j]) {
                arr.splice(j, 1);
            }
        }
    }

    return arr;
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3))

答案 2 :(得分:0)

我建议采用一种不会改变原始数组的简单方法。由于使用哈希值,因此也具有O(n)的好处。

function notDestroyer(arr) {
  var lookup = {};
  var result = [];

  for (var i = 1; i < arguments.length; i++) {
    lookup[arguments[i]] = true;
  }

  for (var j = 0; j < arr.length; j++) {
    if (!lookup[arr[j]]) {
      result.push(arr[j]);
    }
  }

  return result;
}