【问题标题】:How to handle null values with lodash如何使用 lodash 处理空值
【发布时间】:2019-03-22 04:07:01
【问题描述】:

这是简单的json

  {
    home: 68
    id: 1
    name: "RL Conference Room"
    nickname: null
    setpoint: 32.34
    sleep: 58
  }

当我得到空键时,这个 lodash 函数起作用

_.get(room, 'keyName', 'whenKeyNotFound')

但正如您在上面看到的,我在nickname 中得到了空值,所以我想用name 替换它,但这不起作用。

_.get(room, 'nickname', 'name')

lodash 中是否有任何功能可以解决问题?

谢谢!!!

【问题讨论】:

标签: javascript lodash


【解决方案1】:

您可以依赖null, undefined, etc. are falsy,并使用|| 运算符。

_.get(room, 'nickname') || _.get(room, 'name')

【讨论】:

    【解决方案2】:

    由于null 是假的,你可以这样做

    _.get(room, 'nickname') || 'name'

    .get 仅在结果为undefined 时返回第三个参数

    见:https://lodash.com/docs/4.17.10#get

    【讨论】:

      【解决方案3】:

      在一个级别的场景中,因为(在你的情况下)null 也是一个不受欢迎的结果,看起来你最好没有 lodash,只需这样做:

      room.nickname || room.name 
      

      它实际上会更短并且在您的情况下达到相同的结果。

      你也可以这样做:

      let name = _.defaultTo(room.nickname, room.name)
      

      _.defaultTo 保护您免受null, NaN and undefined 的侵害

      因此,在上述情况下,您将获得obj.name,但如果您设置了nickname,您将获得。

      在路径较长的情况下,您可以在自定义函数中使用_.isEmpty,如下所示:

      const getOr = (obj, path, def) => {
          var val = _.get(obj, path)
          return _.isEmpty(val) ? def : val
      }
      

      这将根据_.isEmpty docs 处理您的null 以及其他场景。

      您可以简单地使用 as:

      getOr(room, 'nickname', room.name)
      

      你可以嵌套它:

      getOr(room, 'nickname', getOr(room, 'name', 'N/A'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 2016-11-11
        • 2014-10-14
        相关资源
        最近更新 更多