我相信Coffeescript(?
令牌)中有一种机制,但我想知道是否有更好的方法可以在ES6中进行此类检查:
if (item && item.integrations && item.integrations.slackData) ...
(除了编写辅助功能,这是立即明显的解决方案)
编辑:这里的目标是使代码简单且尽可能简洁。
示例对象:
item = { integrations: { slackData: { url: '...' } } };
编辑2:感谢您指出重复项。我无法找出要搜索的条款。我可能会使用Lodash的_.get()
函数。
您可以使用Array.prototype.every()
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":|"url":/g/
一起使用,然后检查结果数组的.length
(如果有)等于预期的属性数量;在当前情况下3
。
传递给JSON.stringify()
的javascript
对象应具有以下模式的属性:
"
,其次是property
,其次是"
,然后是:
。根据源对象,RegExp
可以进一步调整以满足该对象的特定属性和值。
JSON.stringify(item).match(/"integrations":|"slackData":|"url":/g).length === 3
请注意,JSON.stringify()
具有replacer
选项,可用于匹配对象的属性。replacer
功能选项是递归的。另请参见
从嵌套数组中删除对象
嵌套对象和数组破坏
将JavaScript对象转换为单个对象的数组
如何过滤对象并获取一个新对象?
,但我想知道是否有更好的方法可以进行此类检查 ES6:
目前的答案没有尝试指出使用JSON.stringify()
和RegExp
匹配或过滤javascript
对象是"更好"的;但是,只有该方法才能满足当前问题的所述要求。