簡體   English   中英

雄辯的Javascript第5章-JSON-過濾,映射(高階函數)

[英]Eloquent Javascript Chapter 5 - JSON - Filtering, mapping (Higher-Order functions)

在解釋數組過濾時,通過使用自定義函數,我很難理解部分代碼(我將在下面列出該函數及其調用方式):

我遇到麻煩的特定行是該函數的調用:

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

具體來說,function( person ){...自變量person來自何處? 該代碼可以正常工作,但是到目前為止,我還沒有聲明過一個帶有參數的函數,但是在調用它時再也不會傳遞該參數。 有人可以解釋嗎?

值得一提的是,我們正在從JSON對象進行過濾,這從用於將數據提取到數組中的JSON.parse函數中應該很清楚。 我已經搜索了JSON文檔,並且那里沒有提及“人”的名稱的實體或屬性。

以JSON的一部分為例

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; }))

確定找到了答案。

如果其他人對此有疑問,請參閱下文...

filter函數接受兩個參數 :一個數組和一個test函數

在這種情況下, 測試功能為:

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

在“ 過濾器 ”功能中,我們得到以下代碼行:

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

所以基本上我們得到:

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

因此,實際上是在其“ 過濾器 ”父函數中調用該函數時,便傳遞了無名函數中的“ ”參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM