我有一个对象req.user.stripe,其值为空对象def get_symbols(lot):
symbols = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
newlot = []
for i in lot:
if i == symbols:
newlot.append(symbols)
return newlot
else:
return None
。
我想使用lodash函数{}
来检查此对象是否为空。当我运行isEmpty()
时,我得到console.log(_.isEmpty(req.user.stripe))
的返回值。 false
实际上返回一个空对象console.log(req.user.stripe)
。
不确定我错过了什么。我愿意使用除了lodash之外的其他方法。本质上,我需要访问req.user.stripe中的属性,但仅当req.user.stripe不是空对象时(否则我会收到一条错误,指出JS无法读取{{1}上的属性{}
}})。
澄清
在我的mongoose模式中,创建用户时,它们是使用x
参数创建的,但默认为空对象undefined
。只有当我们真正与条纹交谈时才会填满数据。我的系统中有许多beta用户被提供帐户,但没有通过与在前端注册的人相同的过程。这些用户现在需要付费,但他们必须保留他们的帐户。我需要检测用户是否有条带信息,因此我要检查req.user对象中的条带参数是否为空对象。
例如,如果我想访问用户保存卡的最后4位数字,我可以通过stripe
方式访问它。但是,在尝试访问没有条带数据的用户时,会出现类似于{}
的错误。当req.user.stripe.customer.sources.data[0].last4
对象为空时,我需要能够处理这样的条件。
答案 0 :(得分:0)
在访问该属性之前,请使用if语句:
if(req.user && req.user.stripe) { do_your_thing() }
答案 1 :(得分:0)
这里有三个选项:
您的对象实际上并不是空的,出于某种原因,它在控制台上显示为空。
当你执行console.log时它实际上是空的,但是当你执行_.isEmpty
时却没有(正如@Todd Chaffee在评论中所建议的那样;但我觉得这很可疑)
_.isEmpty
中存在错误。 (我也觉得这个可疑,但这是可能的)
但是,正如其他人在评论中所说,我认为_.isEmpty
首先不是你想要的。
以req.user.stripe.customer.sources.data[0].last4
为例:如果req.user.stripe
不为空,但未定义customer
,或者它是空的,或已定义sources.data
,该怎么办?数组是未定义的还是空的,或者等等?当然,也许所有这些情况在当前的代码中是完全不可能的,但它们总是会吗? _.isEmpty(req.user.stripe)
是一个相当脆弱的测试。
更安全的替代方法是_.get(req, "user.stripe.customer.sources.data[0].last4")
,如果任何这些中间属性为空,它将返回null
。
...但坦率地说,它有一个更大的结构问题,你试图获得信用卡的最后4位数而不知道你是否首先得到了一个客户。
答案 2 :(得分:0)
这是一个老问题,但是使用_.isNil(object)为我解决了这个问题,如果object为null或为空,则返回。