3

好的,这就是我得到的:

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
}

正如你所看到的,它是一个以数组作为值的字典,我想知道所有键的第一个值是false还是true混合的,这工作正常,但我确信有更好的方法来做到这一点,任何帮助?

4

2 回答 2

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
于 2013-03-28T18:09:27.130 回答
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
于 2013-03-28T18:07:22.200 回答