如何测试关联数组中的所有值是否为真? (JavaScript)的

时间:2015-11-25 18:23:38

标签: javascript logic

关联数组:

collectionView:viewForSupplementaryElementOfKind:atIndexPath:

我的尝试:

var signUpStates = {
    "CNPJ": false,
    "PASSWORDS": false,
    "ADDRESS": false,
    "GENERAL_FIELDS": false,
    "TERMS": false,
}

迭代它并单独检查不起作用。做这种测试的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

最直接的解决方案(如果您询问逻辑)将用于循环:

var is = true;

for (var key in signUpStates) {
    if (!signUpStates[key]) {
        is = false;
        break;
    }
}

严格地说,正确的方法也是只检查自己的属性,如果您正在测试的对象可能从其他对象继承属性,这很重要:

var is = true;

for (var key in signUpStates) {
    if (signUpStates.hasOwnProperty(key) && !signUpStates[key]) {
        is = false;
        break;
    }
}

在像您这样的简单情况下,不需要进行额外的检查。

答案 1 :(得分:1)

您可以从Object.keys获取对象属性名称的数组,然后使用Array#every

if (Object.keys(signUpStates).every(function(name) { return signUpStates[name]; })) {
    // All are true
} else {
    // Not all are true
}

使用ES2015(又名ES6)箭头功能,这会变得更短:

if (Object.keys(signUpStates).every(name => signUpStates[name])) {
    // All are true
} else {
    // Not all are true
}

对ES2015的支持仍然相对较薄,特别是如果您必须处理在规范最终确定之前发布的浏览器,那么如果这是针对一般网页,则不要使用它们或使用转换器。如果这是针对NodeJS的,那么您可以直接在v4及更高版本中使用它们。