繁体   English   中英

过滤函数的JavaScript函数参数

[英]JavaScript function arguments for filter function

numbers = [1,2,3,4,5,4,3,2,1]; 
var filterResult = numbers.filter(function(i){
    return (i > 2);
});       

我不明白这是如何工作的。 如果我将i省略为函数参数,它会破坏函数,但是i不依赖于任何东西,为什么它需要在那里呢?

.filterArray.prototype.filter )使用3个参数调用提供的函数:

function(element, index, array) {
    ...
  • element是调用的特定数组元素。
  • index是元素的当前索引
  • array是要过滤的数组。

您可以使用任何或所有参数。

在您的情况下, i引用element并在函数体中使用:

function(i){
    return (i > 2);
}

换言之,“过滤器元件,其中element是大于2”。

我是在闭包内部时对集合中当前对象的引用。 它可以被命名为任何东西,因为它只是一个变量,但是它必须在闭包内具有相同的名称。 而不是使用function(){}您可以使用回调,这是filter设计方式。

引用是通过.filter的定义隐式完成的,你可以在这里阅读更多内容: http//msdn.microsoft.com/en-us/library/ff679973.filter .aspx

i实际上非常重要。 它告诉过滤器函数有关它所作用的元素的信息。 实际上它就在这里使用(i > 2)

这样可以保留值大于2的元素。

i是你提供给.filter()的函数的形式参数 如果你不插入它,函数将没有任何方式¹来引用它传递的参数(函数体内的i将引用一些甚至可能没有定义的其他实体 - window.i将是典型的)。


¹这在技术上是谎言,但在本次讨论中认为是正确的

确实是一个旧线程,但只是填补了未说明的内容。

程序员可以在括号中插入对您的特定程序有意义的变量名称。

如果你选择'我',大多数其他(初学者)程序员可能会想'哦,我的意思是索引'。 哪个是错的。

如果你使用一个参数而不是三个,我会选择'el'来表示元素,或者如果你的数组包含苏打的味道,我会选择'flavor'。

这是ES5表示法,也许如果你在ES6表示法中看到它,你会明白为什么“i”是必须的:

numbers.filter(i => i > 2);

必须始终使用变量来引用在每次迭代中处理的数组项(在本例中为“i”)。 它必须作为参数传递给函数的入口点(在箭头前面的ES6中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM