【问题标题】:Lodash isUndefined providing unexpected resultLodash isUndefined 提供了意想不到的结果
【发布时间】:2016-08-18 11:08:46
【问题描述】:

我在 Node 中有一个使用 Lodash isUndefined 的三元组: sendUser.company = _.isUndefined(user.accounts[0].name) ? null : user.accounts[0].name; 但是当我尝试运行它时,我得到了 TypeError: Cannot read property 'name' of undefined。不确定我在这里缺少什么。

【问题讨论】:

  • user.accounts[0] 未定义,因此 js 无法读取未定义的属性“名称”

标签: javascript node.js underscore.js lodash


【解决方案1】:

似乎帐户[0] 也可能未定义 - 所以您也需要检查一下:

sendUser.company = ! user.accounts[0] || _.isUndefined(user.accounts[0].name) ? null : user.accounts[0].name;

【讨论】:

  • 检查user.accounts[0] 是否已定义可解决问题;是否有任何未定义的检查会通过属性冒泡?
  • 我不这么认为@KlatchBaldar
【解决方案2】:

您确定实际定义了 user.accounts[0] 吗?

这看起来您正在尝试检查“名称”是否未定义。根据我对 _isUndefined() 的了解,它只会查找特定值,因此无法检查 .name 属性的状态,因为 user.accounts[0] 本身是未定义的。

你也可以在检查 .name 属性之前检查它。

【讨论】:

  • 检查user.accounts[0] 是否已定义可解决问题;是否有任何未定义的检查会通过属性冒泡?
【解决方案3】:

您可以使用_.get 来保证安全:

sendUser.company = _.get(user, 'accounts[0].name') || null;

【讨论】:

  • 谢谢。查看文档,似乎另一种编写方式是:sendUser.company = _.get(user, 'accounts[0].name', null)
  • @KlatchBaldar 哦,你是对的。我错过了。这样更整洁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 2017-01-05
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2021-04-22
相关资源
最近更新 更多