我相信CoffeeScript中有一种机制(?
令牌),但我想知道是否有更好的方法在ES6中进行这种检查:
if (item && item.integrations && item.integrations.slackData) ...
(除了编写辅助函数,这是一个明显的解决方案)
编辑:这里的目标是使代码尽可能简单和简洁。
示例对象:
item = { integrations: { slackData: { url: '...' } } };
编辑2:感谢您指出重复项。我无法弄清楚要搜索的条件。我可能会使用lodash的_.get()
函数。
答案 0 :(得分:-2)
您可以使用Array.prototype.every()
var check = [item, item.integrations, item.integrations.slackData]
.every(function(element) { return element });
修改,更新
如@FelixKling的评论所述,如果.every()
未定义,则使用item.integrations
的上述模式将失败。
鉴于问题中的示例对象,您可以使用JSON.stringify()
,String.prototype.match()
和RegExp
/"integrations":|"slackData":|"url":/g/
,然后检查结果数组的.length
是否存在,等于预期的属性数量;在本案中3
。
传递给javascript
的{{1}}对象应具有以下格式的属性:
JSON.stringify()
后跟"
,然后是property
,后跟"
。根据源对象,可以进一步调整:
以满足该对象的特定属性和值。
RegExp
请注意,JSON.stringify(item).match(/"integrations":|"slackData":|"url":/g).length === 3
具有JSON.stringify()
选项,可用于匹配对象的属性。 replacer
函数选项是递归的。另见
但是我想知道是否有更好的方法来进行这种检查 ES6:
本答案并未尝试表明使用replacer
和JSON.stringify()
匹配或过滤RegExp
对象是“更好”;但只是该方法能够满足本课题所述的要求。