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