将数组和其他参数传递给函数。怎么样?

时间:2019-02-04 12:37:36

标签: javascript arrays

我有一个函数,该函数需要一个数组和其他类似的参数: 函数 arrayandmore([1、2、3],2、3) 我需要返回数组([1、2、3]),而没有那些等于数组后面参数的元素。因此,在这种情况下,返回的数组将是: ([1])。

我的方法之一是:

function destroyer(arr) {
  var args = Array.from(arguments);
  var i = 0;
  while (i < args.length) {
    var result = args[0].filter(word => word !== args[i]);
    i++;
  }
  console.log(result);
}

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

控制台返回:

[ 1, 1, 4 ]

我不明白,为什么它也返回一个-我不明白,为什么它不起作用。

使用接头也是如此。

function destroyer(arr) {
  var args = Array.from(arguments);
  var quant = args.length - 1;
  for (var i = 1; i <= quant; i++) {
    if (arr.indexOf(args[i]) !== -1) {
      arr = arr.splice(arr.indexOf(args[i]));
    }
    console.log(arr);
  }
}
destroyer([1, 1, 3, 4], 1, 3); 

我认为,两种方法都应该起作用。但是我不知道为什么他们不这么做。

1 个答案:

答案 0 :(得分:3)

您的while无法正常工作,因为result在每个循环中均被覆盖。因此,它只会删除destroyer函数的最后一个参数

您可以使用rest parameter syntax分隔数组和要删除的项目。

然后像这样使用filterincludes

function destroyer(arr, ...toRemove) {
  return arr.filter(a => !toRemove.includes(a))
}

console.log(destroyer([1, 1, 3, 4, 5], 1, 3))