2017-03-02 19 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