Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个算法是如何工作的?这个代码是什么意思?_Javascript_Algorithm - Fatal编程技术网

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

Javascript 这个算法是如何工作的?这个代码是什么意思?,javascript,algorithm,Javascript,Algorithm,我试图弄明白下面的代码是什么意思。我从freecodecamp.com上得到了它,我正在那里做一个挑战。这种挑战被称为“寻找并摧毁”。我只是其中的一员,为了我继续下去,我必须了解正在发生的事情,所以有人能给我解释一下这段代码是如何工作的,以及它是如何自上而下工作的吗 function destroyer(arr) { var args = Array.prototype.slice.call(arguments); return arr.filter(function(element)

我试图弄明白下面的代码是什么意思。我从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
中删除值,但我只想知道它是如何做到的

var args = Array.prototype.slice.call(arguments);
此行接受函数中给定的所有参数,并将它们放入数组中。在这种情况下,值是
[[1,2,3,1,2,3],2,3]

return arr.filter(function(element){
    ...
});
该函数采用一个匿名函数,该函数可以有三个参数:
元素、索引、
数组
。在这种情况下,函数在数组
arr
中进行迭代,即
[1,2,3,1,2,3]
。对于此函数,如果返回
true
,则保留元素;如果返回
false
,则从数组中删除元素

return args.indexOf(element) === -1
这里,我们检查数组
args
是否包含元素
元素
。该方法返回找到元素的索引,如果未找到该元素,则返回
-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;
  });
}

你读过什么书吗?元素
不是
.filter()
的参数,而是传递给
.filter()
的匿名函数的参数。该函数由
.filter()
在内部调用,因此在调用时设置
元素
值的是
.filter()
@nnnnnn依次排列
arr
数组中的每个元素。请阅读我链接的
.filter()
文档,研究其中的示例,如果您仍然不理解,也许有人可以进一步解释。作为进一步的一般提示,
.slice.call(…)
行正在将所有
destructor()
函数的参数转换为数组,以便它们可以与
.indexOf()一起使用。