簡體   English   中英

如何在Ramda中的對象的屬性之間移動值?

[英]How can I move values between properties of an object in Ramda?

我有以下對象:

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)
}

這是一個版本:

const drawIntoHand = (() => {
  const deck = lensProp('cards');
  const hand = lensProp('hand');

  return (amount, player) => {
    const draw = take(amount, view(deck, player));
    return over(deck, drop(amount), over(hand, concat(draw), player));
  };
})();

drawIntoHand(3, player); //=> {"cards": [4, 5], "hand": [1, 2, 3]}

但是,我什至不會嘗試做出類似這樣的觀點。 我不確定該怎么做,但是如果可以的話,我敢肯定它會更難閱讀。

您可以在Ramda REPL上看到它的運行情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM