以任何方式,可以深入检查真实价值的对象



我相信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":|"ur‌​l":/g/一起使用,然后检查结果数组的.length(如果有)等于预期的属性数量;在当前情况下3

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

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

JSON.stringify(item).match(/"integrations":|"slackData":|"ur‌​l":/g).length === 3

请注意,JSON.stringify()具有replacer选项,可用于匹配对象的属性。replacer功能选项是递归的。另请参见

  • 从嵌套数组中删除对象

  • 嵌套对象和数组破坏

  • 将JavaScript对象转换为单个对象的数组

  • 如何过滤对象并获取一个新对象?

,但我想知道是否有更好的方法可以进行此类检查 ES6:

目前的答案没有尝试指出使用JSON.stringify()RegExp匹配或过滤javascript对象是"更好"的;但是,只有该方法才能满足当前问题的所述要求。

最新更新