发布
社区首页 >问答首页 >在JavaScript中,有什么方法可以深入检查对象的真值吗?

在JavaScript中,有什么方法可以深入检查对象的真值吗?
EN

Stack Overflow用户
提问于 2016-12-16 03:58:17
回答 1查看 219关注 0票数 2

我相信在CoffeeScript ( ?令牌)中有这样一种机制,但我想知道在ES6中是否有更好的方法来完成这种检查:

代码语言:javascript
代码运行次数:0
复制
if (item && item.integrations && item.integrations.slackData) ...

(除了编写一个helper函数之外,这是直接显而易见的解决方案)

编辑:这里的目标是使代码尽可能简单和简洁。

示例对象:

代码语言:javascript
代码运行次数:0
复制
item = { integrations: { slackData: { url: '...' } } };

编辑2:感谢您指出副本。我不知道该搜索什么词条。我可能会使用lodash的_.get()函数。

EN

回答 1

Stack Overflow用户

发布于 2016-12-16 04:02:01

您可以使用Array.prototype.every()

代码语言:javascript
代码运行次数:0
复制
var check = [item, item.integrations, item.integrations.slackData]
            .every(function(element) { return element });

编辑,更新

正如@FelixKling在评论中指出的那样,如果item.integrations是未定义的,那么上面使用.every()的模式将失败。

给定有问题的示例对象,您可以使用JSON.stringify()String.prototype.match()RegExp /"integrations":|"slackData":|"ur‌​l":/g/,然后检查结果数组的.length (如果有)是否等于预期的属性数量;在本例中为3

传递给JSON.stringify()javascript对象应具有以下模式的属性:

依次是"property":。根据源对象,可以进一步调整RegExp以满足该对象的特定属性和值。

代码语言:javascript
代码运行次数:0
复制
JSON.stringify(item).match(/"integrations":|"slackData":|"ur‌​l":/g).length === 3

请注意,JSON.stringify()有一个replacer选项,可用于匹配对象的属性。replacer函数选项是递归的。另请参阅

,但我想知道是否有更好的方法在ES6中执行这种检查:

目前的答案并不是试图表明使用JSON.stringify()RegExp来匹配或过滤javascript对象是“更好的”;而只是表明该方法可以满足当前问题中所描述的需求。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41172377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档