我相信在CoffeeScript ( ?
令牌)中有这样一种机制,但我想知道在ES6中是否有更好的方法来完成这种检查:
if (item && item.integrations && item.integrations.slackData) ...
(除了编写一个helper函数之外,这是直接显而易见的解决方案)
编辑:这里的目标是使代码尽可能简单和简洁。
示例对象:
item = { integrations: { slackData: { url: '...' } } };
编辑2:感谢您指出副本。我不知道该搜索什么词条。我可能会使用lodash的_.get()
函数。
发布于 2016-12-16 04:02:01
您可以使用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
函数选项是递归的。另请参阅
,但我想知道是否有更好的方法在ES6中执行这种检查:
目前的答案并不是试图表明使用JSON.stringify()
和RegExp
来匹配或过滤javascript
对象是“更好的”;而只是表明该方法可以满足当前问题中所描述的需求。
https://stackoverflow.com/questions/41172377
复制相似问题