这是简单的json
{
home: 68
id: 1
name: "RL Conference Room"
nickname: null
setpoint: 32.34
sleep: 58
}
Run Code Online (Sandbox Code Playgroud)
当我得到空键时,此lodash函数有效
_.get(room, 'keyName', 'whenKeyNotFound')
Run Code Online (Sandbox Code Playgroud)
但是正如您在上面看到的那样,我在中获得了空值,nickname因此我想将其替换为,name但这是行不通的。
_.get(room, 'nickname', 'name')
Run Code Online (Sandbox Code Playgroud)
lodash中有什么功能可以解决这个问题?
谢谢!!!
在一个级别的场景中,因为(在你的情况下)null也是一个不受欢迎的结果,似乎你没有 lodash 更好,只需这样做:
room.nickname || room.name
Run Code Online (Sandbox Code Playgroud)
在您的情况下,它实际上会更短并达到相同的结果。
你也可以这样做:
let name = _.defaultTo(room.nickname, room.name)
Run Code Online (Sandbox Code Playgroud)
_.defaultTo保护您免受null, NaN and undefined
所以在上面的情况下,你会得到,obj.name但如果你已经nickname设置,你会得到。
在路径很长的情况下,您可以_.isEmpty在这样的自定义函数中使用:
const getOr = (obj, path, def) => {
var val = _.get(obj, path)
return _.isEmpty(val) ? def : val
}
Run Code Online (Sandbox Code Playgroud)
这将null根据_.isEmpty docs处理您和其他场景。
然后您可以简单地用作:
getOr(room, 'nickname', room.name)
Run Code Online (Sandbox Code Playgroud)
你可以嵌套它:
getOr(room, 'nickname', getOr(room, 'name', 'N/A'))
Run Code Online (Sandbox Code Playgroud)
你可以依靠的事实是null,undefined等都是falsy,并使用||运营商。
_.get(room, 'nickname') || _.get(room, 'name')
Run Code Online (Sandbox Code Playgroud)