因此,我正在自学HTML,CSS,JavaScript。我正在浏览箭头函数,并在MDN网站上找到了以下代码,但不确定我是否清楚了解filter()函数的工作方式。这就是我的理解:“ word”是testFunct()的参数,参数是wrds数组的元素,它们被传递给testFunct(word)。就像过滤器功能遍历数组的每个元素(参数)并评估需求(word.length> 6)一样吗?就像使用normal(对我来说是个新手,这对我来说是正常的)参数/参数对一样,假设您传递了2个参数,并且有2个参数可以接收它们。谢谢。
var wrds = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
//const result = words.filter(word => word.length > 6);
//write the arrow function as full function to see if you understood how it works.
const result = wrds.filter(function testFunct(word) {return word.length > 6;});
console.log(result);
prints 'exuberant', 'destruction', 'present
答案 0 :(得分:1)
在同一MDN页面上的polyfill表示该算法与ECMA-262第5版中指定的算法完全相同:
if (!Array.prototype.filter){
Array.prototype.filter = function(func, thisArg) {
'use strict';
if ( ! ((typeof func === 'Function' || typeof func === 'function') && this) )
throw new TypeError();
var len = this.length >>> 0,
res = new Array(len), // preallocate array
t = this, c = 0, i = -1;
if (thisArg === undefined){
while (++i !== len){
// checks to see if the key was set
if (i in this){
if (func(t[i], i, t)){
res[c++] = t[i];
}
}
}
}
else{
while (++i !== len){
// checks to see if the key was set
if (i in this){
if (func.call(thisArg, t[i], i, t)){
res[c++] = t[i];
}
}
}
}
res.length = c; // shrink down array to proper size
return res;
};
}
因此,是的,它使用while
循环来迭代数组。
答案 1 :(得分:0)
就像过滤函数遍历数组的每个元素(参数)并评估需求(word.length> 6)一样吗?
是的。 (对于“ assessess”值等于“以数组元素作为参数调用该函数并测试响应的真实性。)
假设您传递2个参数,并且有2个参数可以接收它们。
您传递的唯一参数是函数filter()
的参数。
调用该函数的是filter()
,它传递三个参数(当前数组元素,该元素的索引以及整个数组)。
答案 2 :(得分:0)
函数过滤器就像一个for循环,它获取数组的每个元素并使用函数对其进行过滤。假设:
var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
先进行“喷涂”,然后进行限制,再进行精英赛等,然后进行
spray.length > 6 = false
limit.length > 6 = false
elite.length > 6 = false
exuberant.length > 6 = true
destruction.length > 6 = true
present.length > 6 = true
获取所有true并将其重新映射到新数组中