Ramda:如何通过过滤功能保持原有结构
Ramda: How to keep the original structure with filter function
我想做一个过滤功能如下图:
配置:
const arr = {
id: 888,
name: 'Library',
bookLists: [{
"name": "Book 1",
"booked": "Y"
}, {
"name": "Book 2",
"booked": "N"
}, {
"name": "Book 3",
"booked": "Y"
}]
};
然后我尝试用标记'booked === 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"
}]
}
您可以使用 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。
我想做一个过滤功能如下图:
配置:
const arr = {
id: 888,
name: 'Library',
bookLists: [{
"name": "Book 1",
"booked": "Y"
}, {
"name": "Book 2",
"booked": "N"
}, {
"name": "Book 3",
"booked": "Y"
}]
};
然后我尝试用标记'booked === 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"
}]
}
您可以使用 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。