如何使用 Lodash get 处理空值

10

这是简单的 JSON

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

当我得到空键时,这个 Lodash 函数可以起作用。
_.get(room, 'keyName', 'whenKeyNotFound')

但是正如您在上面看到的,我在昵称中得到了空值,所以我想用名称来替换它,但这并不起作用。

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

有没有 lodash 中可以实现这个功能的函数?
谢谢!!!

第一个情况可行是因为键不存在,但在第二个情况中,键存在且具有有效值。 - Umair Abid
这也可以工作,但没有 lodash,room?.nickname ?? name。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator - foxiris
4个回答

10

在一个级别的场景中,由于(在您的情况下)null也是一个不希望的结果,因此似乎您最好不要使用lodash,而只需执行以下操作:

Translated Content:

在一个级别的场景中,由于(在您的情况下)null也是一个不希望的结果,因此似乎您最好不要使用lodash,而只需执行以下操作:

room.nickname || room.name 

在您的情况下,实际上缩短并达到相同的结果是可行的。

您还可以执行以下操作:

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

_.defaultTo 保护你免受 null、NaN 和 undefined 的影响。

因此,在上面的情况下,你会得到 obj.name,但如果你设置了 nickname,那么你将得到它。

在具有长路径的情况下,你可以像这样使用 _.isEmpty 在自定义函数中:

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

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

然后,您可以简单地使用如下:

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

并且你可以嵌套它:

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

8

2

由于null是假值,因此您可以执行以下操作:

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

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

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


0

使用自定义的获取函数

创建一个实用函数,建立在lodash的获取函数之上,以处理null值。

customGet()如何工作?

如果值为nullundefined,返回默认值。

注意:只有在提供了默认值的情况下,才会将null值设为默认值。

import lodashGet from "lodash/get";

type TGetParams = Parameters<typeof lodashGet>;

export function customGet(
  object: TGetParams[0],
  path: TGetParams[1],
  defaultValue?: TGetParams[2]
) {
  const value = lodashGet(object, path);

  if (defaultValue !== undefined) {
    return value ?? defaultValue;
  }

  return value;
}

在 Codesandbox 中打开


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接