如何使用lodash处理空值

Dar*_*ght 2 javascript lodash

这是简单的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中有什么功能可以解决这个问题?

谢谢!!!

Akr*_*ion 8

在一个级别的场景中,因为(在你的情况下)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)


AKX*_*AKX 5

你可以依靠的事实是nullundefined等都是falsy,并使用||运营商。

_.get(room, 'nickname') || _.get(room, 'name')
Run Code Online (Sandbox Code Playgroud)