更好的方法来检查字典上的所有值是否都是真的?

时间:2013-03-28 18:03:24

标签: javascript for-loop dictionary

好的,这就是我得到的:

var matchgrid = {
    "a1":[false, 0], "a2":[false, 0], "a3":[false, 0],
    "b1":[false, 0], "b2":[false, 0], "b3":[false, 0],
    "c1":[false, 0], "c2":[false, 0], "c3":[false, 0]};

var keys = Object.keys(matchgrid);

var ch = 0;

for (i=0;i<9;i++) {
        if (matchgrid[keys[i]][0] === false) {
            ch += 1;
        } else if (matchgrid[keys[i]][0] === true) {
            ch -= 1;
        }
    }

//then check it with:

if (ch === 9) {
    //do something
} else { 
    //do something else
}

正如你所看到的,它是一个以数组作为值的字典,我想知道所有键的第一个值是falsetrue还是混合,这个工作正常,但我我确定有更好的方法可以做到,有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

您的原生JavaScript方法很好。您可以只存储一个布尔值,而不是存储总和,将其设置为true,然后如果您看到false,则将其设置为false。然后检查ch == 9而不是检查布尔值。

但是,如果你可以使用underscore.js(列表中有许多有用的函数),其中一个函数叫做every,它检查每个项目是否通过了真值测试。然后就变得这么简单了

_.every(matchgrid, function(item) {
     return item[0];
})

更短,更有点发烧友:

_.every(matchgrid, _.first); // will return true if all elements are true

答案 1 :(得分:1)

var ch = 0;

var result;
for (i=0;i<9;i++) {
        result = matchgrid[keys[i]][0];
        if (result) {
            break;
        } 
    }

// result will be false if they are all false