可以't获取此函数以删除基于javaScript中后续参数的特定元素

Can't get this function to remove specific elements based on subsequent arguments in javaScript

本文关键字:javaScript 参数 元素 获取 删除 函数 可以      更新时间:2024-02-24

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

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]

我刚找回原来的数组?!

这是一个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));

这应该可以工作,但它的big-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))

我建议一种更简单的方法,它不会改变原始数组。由于使用了散列,因此还具有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;
}