【发布时间】:2016-03-22 21:23:33
【问题描述】:
我有以下对象:
var player = {
cards: [1,2,3,4,5],
hand: []
}
我想将cards 属性的一些项目移动到hand。
我虽然使用镜头来防止物体发生变异,但无法找到一个解决方案,让我只需要组合函数就可以做到这一点。也许不应该那样做。
我能做的最好的如下:
function drawIntoHand(amount, player) {
const deck = R.lensProp('cards')
const hand = R.lensProp('hand')
let cardsRemoved = R.over(deck, R.take(amount), player)
R.set(hand, R.append(cardsRemoved), player)
return R.set(deck, R.drop(amount), player)
}
【问题讨论】:
-
您要按索引还是按值移动卡片?
-
通过组合函数,一切皆有可能(正如 lambda 演算告诉我们的那样),但它不一定是声明性的。
-
为什么忽略
R.set(hand, R.append(cardsRemoved), player)的结果?
标签: javascript functional-programming ramda.js