Eloquent Javascript第5章 - JSON - 过滤,映射(高阶函数)

时间:2017-09-17 12:51:46

标签: json function parameter-passing

在解释数组过滤时,通过使用自定义函数,我很难理解部分代码(我将列出函数及其在下面的调用方式):

我遇到的具体问题是调用函数:

console.log(filter(JSON.parse(ANCESTRY_FILE), function(person) { return person.born > 1900 && person.born < 1925; }))

具体来说,功能(){... 论证来自哪里?代码工作正常,但到目前为止,我从未声明过一个接受参数的函数,但是当它被调用时,从不传递该参数。有人可以解释一下吗?

值得一提的是我们正在从JSON对象中过滤,这应该从用于将数据提取到数组的JSON.parse函数中清楚。我搜索了JSON文档,并没有提到一个名为“人”的实体或财产。那里。

Part of the JSON as an example

function filter(arr, test) { 
    //A custom function for filtering data from an array.

    var passed = []; //Creating a new array here to keep our function pure.

    for (i=0; i<arr.length; i++) { // Populate our new array with results
        if (test(arr[i])) { // test = function(person) { return person.born > 1900 && person.born < 1925; }
            passed.unshift(arr[i]); // unshift adds an element to the front of the array
        }
    }

    return passed; //return our results.
}

// Where we call on our function and return the result.
    console.log(filter(JSON.parse(ANCESTRY_FILE), function(person) { return person.born > 1900 && person.born < 1925; }))

1 个答案:

答案 0 :(得分:0)

好的找到了答案。

如果其他人对此有疑问,请参阅下文......

过滤器函数有两个参数:一个数组和一个测试函数

在这种情况下,测试功能是:

function(person) { return person.born > 1900 && person.born < 1925; }

在&#39; 过滤器&#39;功能,我们得到这一行:

if (test(arr[i])) {...

所以基本上我们得到了:

if (arr[i].born > 1900 && arr[i].born < 1925) {..

所以&#39; &#39;无名函数中的参数在函数实际从其“过滤器&#39;中被调用的那一刻起传递。父母的功能。