gpt4 book ai didi

javascript - 仅当对象存在时使用 Ramda 调用对象的嵌套方法

转载 作者:行者123 更新时间:2023-11-30 08:28:56 24 4
gpt4 key购买 nike

我目前有一个 user 对象,它有一个 currentRoom() 方法,它有时可能不存在或返回 null

如果 currentRoom() 方法返回了一些东西,我就需要调用一个 messages() 方法。如果两者都没有返回任何内容,我想返回一个默认的空数组 []

我想使用 Ramda 在功能上解决这个问题,因为它很简洁且可重用。目前,我的(非 Ramda)代码如下所示:

const user = Users.findOne({ username: params.id })
const room = (user.currentRoom && user.currentRoom() || {})
const messages = (room.messages && room.messages() || [])

我想的某种逻辑是传递所需方法的列表,如果没有任何结果,则传递默认结果。

/* getMessages(defaultIfNull, methodsArray, object) */

getMessages([], ['currentRoom', 'messages'], user)

基本上有点类似于pathOr,但用于对象上的方法。

最佳答案

我想我会像使用 Option 一样使用 List monad:

const getRoom = user => "currentRoom" in user ? [user.currentRoom()] : [];
const getMessages = room => "messages" in room ? room.messages() : [];

const allTogether = R.compose(R.chain(getMessage), R.chain(getRoom), R.of);
console.log(allTogether(Users.findOne({ username: params.id })));

关于javascript - 仅当对象存在时使用 Ramda 调用对象的嵌套方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40870472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com