2017-03-02 18 views
0

我想要做一個過濾功能,如下圖所示:Ramda:如何保持原有的結構,過濾功能

配置:

const arr = { 
    id: 888, 
    name: 'Library', 
    bookLists: [{ 
     "name": "Book 1", 
     "booked": "Y" 
    }, { 
     "name": "Book 2", 
     "booked": "N" 
    }, { 
     "name": "Book 3", 
     "booked": "Y" 
    }] 
    }; 

然後我試圖過濾訂用標誌的圖書清單」 === Y」

R.compose(R.filter(x => x.booked === 'Y'), R.prop('bookLists'))(arr) 

我得到的結果,這是正確的

[{"booked": "Y", "name": "Book 1"}, {"booked": "Y", "name": "Book 3"}] 

但是,這是我想要的一部分。我怎樣才能達到這樣的結果?

{ 
    id: 888, 
    name: 'Library', 
    bookLists: [{ 
     "name": "Book 1", 
     "booked": "Y" 
    }, { 
     "name": "Book 3", 
     "booked": "Y" 
    }] 
    } 

回答

2

您可以使用R.evolve

R.evolve({bookLists: R.filter(x => x.booked === 'Y')})(arr) 

結果將是:

{ 
    id: 888, 
    name: 'Library', 
    bookLists: [{ 
     "name": "Book 1", 
     "booked": "Y" 
    }, { 
     "name": "Book 3", 
     "booked": "Y" 
    }] 
    } 

請參閱相關的文檔here

+1

'evolve'是最適合您需求的功能,但也請注意 - 更通用的''鏡頭'功能:在這種情況下'lensPath'和'over'。 –

+0

問題解決了,非常有用,謝謝! – user2504831