当值为 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)? }
如果可能的话,我建议避免使用 null
、undefined
和可选的记录字段,因为这些都是错误的来源。我建议这样:
// 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')}
更适合代表这些“人”。
我想在值为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)? }
如果可能的话,我建议避免使用 null
、undefined
和可选的记录字段,因为这些都是错误的来源。我建议这样:
// 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')}
更适合代表这些“人”。