这个算法是如何工作的?这段代码是什么意思?

时间:2017-04-28 03:44:55

标签: javascript algorithm

我想弄清楚下面代码的含义。我从freecodecamp.com得到它,我正在那里做一个挑战。挑战被称为“寻求和摧毁”。我只是其中一个必须了解发生了什么才能让我继续下去的人之一,所以有人可以向我解释这段代码是如何工作的以及从上到下有什么作用?

function destroyer(arr) {


var args = Array.prototype.slice.call(arguments);

  return arr.filter(function(element){
    return args.indexOf(element) === -1;
  });
}

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

例如,.filter()方法函数中的“element”参数是什么? javascript如何知道首先是什么“元素”?我一直在问人们并阅读解决方案的描述,但我读到的每个解决方案都非常模糊,并且仍然让我感到困惑。

旁注:我已经知道算法会从arr中移除值,但我只是想知道它是如何做到的。

1 个答案:

答案 0 :(得分:0)

var args = Array.prototype.slice.call(arguments);

该行获取函数中给出的所有参数并将它们放入数组中。在这种情况下,值为[[1, 2, 3, 1, 2, 3], 2, 3]

return arr.filter(function(element){
    ...
});

.filter()函数采用匿名函数,该函数可以包含三个参数:element, index,array。在这种情况下,函数遍历数组arr[1, 2, 3, 1, 2, 3]。对于此函数,如果返回true,则保留元素,如果返回false,则元素将从数组中删除。

return args.indexOf(element) === -1

我们在这里检查数组args是否包含元素element.indexOf()方法返回找到该元素的索引,如果未找到该元素,则返回-1。这意味着如果找不到元素,它将返回true,否则如果找到它,它将返回false(从数组中删除它)。

基本上,上述语句对数组[1, 2, 3, 1, 2, 3]中的每个元素都有意义,如果它在[2, 3]中找到,那么它就被删除了。它在技术上检查[[1, 2, 3, 1, 2, 3], 2, 3],但第一次检查是针对一个数组而不是一个始终为false的元素,所以它也可以省略。

以下是一些简短的评论,说明我上面提到的内容。

function destroyer(arr) {
  // An array of the arguments
  var args = Array.prototype.slice.call(arguments);

  // For every element in the array arr remove elements found in args
  return arr.filter(function(element){
    return args.indexOf(element) === -1;
  });
}