2017-04-25 28 views
1

可以說我有多個電影的陣列,這些電影對象包含的東西像標題/評級/等..的Javascript鏈接方法一起

,如果我做了什麼,像這樣:

let filteredMapList = arr.filter(function(obj){ 
    return obj.Rating > 8.0; 
}).map(function(obj){ 
    return {title: obj.Title,rating: obj.Rating}; 
}); 

這應該工作,並且只返回高於8.0的電影,並且僅返回新對象中的標題和評級。

所以我的困惑是......哪一個是究竟先運行?地圖是先運行,然後通過過濾器或先運行過濾器然後運行地圖(這看起來很奇怪......即使這是它的佈局)。

當鏈接方法一起使用,怎麼辦你到底....遵循鏈。在方法之間傳遞的obj也需要相同嗎?如果不是......那麼我真的很困惑它是如何工作的。

+0

他們按順序運行,就像其他任何事情一樣。在過濾的數組上調用map。我不確定我瞭解混亂。第一次調用返回一個對象,隨後的函數在前一個函數返回的內容上被調用。 –

+0

將函數鏈接在一起時,每個函數都調用前一個函數的返回值。 –

回答

4

它們鏈和他們在爲了準確運行,如果你重寫它這樣這是一個有點更加明顯。

let a = arr.filter(function(obj){ 
    return obj.Rating > 8.0; 
}); 

let b = a.map(function(obj){ 
    return {title: obj.Title,rating: obj.Rating}; 
}); 

filter發生第一和去a,然後map叫上a並用你的結果去b

鏈接的功能是一樣的,你只是跳繩,你創建的每一個步驟一個變量的步驟。

+0

啊,這是一個很好的例子!我想也許每個元素都經過過濾THEN地圖,但它首先完成所有過濾,然後將剩下的東西傳遞給地圖。大! – msmith1114

1

filter運行第一,第二mapmap收到作爲參數=什麼filter返回。

+0

它收到的爭論是每個元素,而不是整個過濾的數組是正確的? – msmith1114

+0

第二個函數接收前一個函數返回的整個結果。在你的例子中,'filter'返回過濾數組,'map'接收這個過濾後的數組,並且將這個數組的每個元素作爲回調的參數調用一個回調函數。 – wostex