在JavaScript中以任何方式深入检查对象的真实价值?

时间:2016-12-15 19:58:17

标签: javascript

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

if (item && item.integrations && item.integrations.slackData) ...

(除了编​​写辅助函数,这是一个明显的解决方案)

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

示例对象:

item = { integrations: { slackData: { url: '...' } } };

编辑2:感谢您指出重复项。我无法弄清楚要搜索的条件。我可能会使用lodash的_.get()函数。

1 个答案:

答案 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":|"ur‌​l":/g/,然后检查结果数组的.length是否存在,等于预期的属性数量;在本案中3

传递给javascript的{​​{1}}对象应具有以下格式的属性:

JSON.stringify()后跟",然后是property,后跟"。根据源对象,可以进一步调整:以满足该对象的特定属性和值。

RegExp

请注意,JSON.stringify(item).match(/"integrations":|"slackData":|"ur‌​l":/g).length === 3 具有JSON.stringify()选项,可用于匹配对象的属性。 replacer函数选项是递归的。另见

  

但是我想知道是否有更好的方法来进行这种检查   ES6:

本答案并未尝试表明使用replacerJSON.stringify()匹配或过滤RegExp对象是“更好”;但只是该方法能够满足本课题所述的要求。