当值为 Just 时设置 属性

Set property when value is Just

我想在值为Just 时设置对象的属性,而在值为Nothing 时不设置属性。但是,如果值为 Nothing,则返回的对象变为 Nothing。

let person = {name: 'Franz'}
const address = getAddress(response) // getAddress returns Maybe

// person will be Nothing if address is Nothing 
person = S.map(R.assoc('address', R.__, person))(address)

您的 Person 类型似乎是这样的:

Person = { name :: String, (address :: Address)? }

如果可能的话,我建议避免使用 nullundefined 和可选的记录字段,因为这些都是错误的来源。我建议这样:

//    person :: Person
const person = {name: 'Franz', address: S.Nothing};

//    address :: Maybe Address
const address = getAddress (response);

//    person$ :: Person
const person$ = R.assoc ('address') (address) (person);

如果出于某种原因在这种情况下您必须有一个可选的 address 字段,您可以使用 S.maybe:

//    person :: Person
const person = {name: 'Franz'}

//    address :: Maybe Address
const address = getAddress (response);

//    person$ :: Person
const person$ = S.maybe (person)
                        (address => R.assoc ('address') (address) (person))
                        (address);

结果将是 {name: 'Franz'} 或类似 {name: 'Franz', address: 'Frankfurter Allee 42'} 的内容。不过,正如我提到的,{name: 'Franz', address: S.Nothing}{name: 'Franz', address: S.Just ('Frankfurter Allee 42')} 更适合代表这些“人”。