有人可以解释代码流程吗?我需要知道函数'isEven'如何获得'x'值
$(document).ready(function(){
var array = [1,2,3,4,5];
function isEven(x){ //checks if a value is even
console.log(x)
return x % 2 == 0;
}
var newArray = array.filter(isEven); //uses a callback to check if an element is even
console.log(newArray);
});
答案 0 :(得分:3)
如代码注释中所述,您正在传递callback
,因此此处在 .filter()
中处理的当前item
将自动传递给此callback
函数或换句话说isEven
函数将与.find()
调用中的当前项一起调用。
您可以在 MDN Reference for .find()
中看到:
回调
对数组中的每个值执行的函数,占用三个 参数:
- 元素。数组中正在处理的当前元素。
所以写:
array.filter(isEven);
相当于写作:
array.filter(function(item){
isEven(item);
});
答案 1 :(得分:2)
解决方案在此行
var newArray = array.filter(isEven); //uses a callback to check if an element is even
在这里,您正在数组上调用方法“ filter”。 Filter采用一个返回true或false的方法,并在每个数组元素上调用它,并传递元素本身。该行可以这样实现
let newArray;
for(let x: array){
if(isEven(x)){
newArray.push(x);
}
}
答案 2 :(得分:1)
数组上的filter()
函数采用一个函数作为输入。在这种情况下,输入函数是isEven
函数。然后,filter
函数在数组上迭代并在每个元素上运行isEven
函数。然后,它会过滤出函数返回false
的数组中的所有元素。
请注意,在filter
函数的括号中,您没有为isEven
函数指定任何参数。这是因为filter
为您做到了。
答案 3 :(得分:1)
答案 4 :(得分:0)
array.filter在循环时没有通过this
作为其参数,它将自动被接受。检查here了解更多详情。
因此,如果您的数组this
的值对应于元素1,2,3,4,5
如果提供了thisArg参数进行过滤,它将用作 回调的这个值。否则,未定义的值将用作 它的这个值。回调最终可观察到的this值是 根据通常的规则来确定 通过功能。
答案 5 :(得分:0)
filter 是Array API中定义的函数,它接收作为参数的“ this ”,在您的情况下为变量“ array ”和一个名为“ isEven ”的回调,其中“ this”是数组的值,它只需要遍历它并为函数调用每个值。