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

如何测试关联数组中的所有值是否为真?(Javascript),javascript,logic,Javascript,Logic,关联数组: var signUpStates = { "CNPJ": false, "PASSWORDS": false, "ADDRESS": false, "GENERAL_FIELDS": false, "TERMS": false, } 我的尝试: function updateButton() { var tempArray = [] $.each(signUpStates, function(i, val) {

关联数组:

var signUpStates = {
    "CNPJ": false,
    "PASSWORDS": false,
    "ADDRESS": false,
    "GENERAL_FIELDS": false,
    "TERMS": false,
}
我的尝试:

function updateButton() {
    var tempArray = []
    $.each(signUpStates, function(i, val) {
        tempArray.push(val);
    });
    if(tempArray.every(function(e, i, a) { return e == true; })) {
        $(".btn-cadastrar-fornecedor").attr('disabled', false);
    } else {
        $(".btn-cadastrar-fornecedor").attr('disabled', true);
    }
}

对它进行迭代并单独检查是不起作用的。进行此类测试的最佳方法是什么?

您可以从中获取对象属性名称的数组,然后使用:

使用ES2015(又称ES6)的箭头功能,这将变得更短:

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

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

您可以从中获取对象属性名称的数组,然后使用:

使用ES2015(又称ES6)的箭头功能,这将变得更短:

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

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

最严格的解决方案(如果您询问逻辑)是使用for循环:

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;
    }
}

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

最严格的解决方案(如果您询问逻辑)是使用for循环:

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;
    }
}

在你这样的简单情况下,这个额外的检查是不需要的。

应该有一个< > >()(代码)>函数,这取决于你在JavaScript中使用哪一个库,我们称之为对象。你应该考虑设置数组对象,如Sebug状态= [],CNPJ(0)= false,密码(1)。应该有一个<代码> .AL()>代码>函数,这取决于你在JavaScript中使用哪一个库,我们只把它们称为对象。你应该考虑设置数组对象,如Sebug状态=[],CNPJ(0)=false,密码[1 ] = false。不过,考虑到OP的代码,这是不必要的。和+1,有时旧的方法是最好的。是的,我想有自己的财产,但在OP的情况下,这是没有必要的。但是是的,最好一提。可能值得一提的是
hasOwnProperty
。不过,考虑到OP的代码,这是不必要的。和+1,有时旧的方法是最好的。是的,我想有自己的财产,但在OP的情况下,这是没有必要的。但是,是的,最好提一提。@ZohaibIjaz:我认为(但可能不应该)人们知道这一点。“我用的是透明。”佐海比贾兹:我认为(但可能不应该)人们知道这一点。我用透明法。